gpt4 book ai didi

c - 字符串数组,并打印这些元素

转载 作者:太空宇宙 更新时间:2023-11-04 08:09:29 24 4
gpt4 key购买 nike

我正在尝试创建一个程序,该程序将从 10 名赛车手那里获取信息。该程序将获取并存储他们的名字、姓氏、年龄、性别 (m/f) 和比赛时间 (hh:mm:ss)。为此,我计划有一个结构数组,其中包含每个赛车手的上述每个元素。然后我遇到了询问“请输入第一个赛车手的名字”的问题,因为“第一个”这个词需要改为“第二个”、“第三个”等等……循环将无法去做。所以我决定制作一个字符串数组,其中数组的第一个元素是单词“first”,依此类推。然后我可以使用循环通过访问 places 数组的每个元素为每个赛车手打印正确的单词。

我对字符串和字符串数组不是很有经验,我在网上搜索了一些帮助并想出了以下程序,它使用一个带有指针的字符数组,我不太明白,一定是什么与字符串有关。无论如何,当我运行该程序时,我遇到了严重的问题,不得不重新打开 Visual Studio。希望有人能帮助我,帮助我解开关于这些字符串数组和指针意义的一些谜团。谢谢!

#include <stdio.h>
#include <math.h>

typedef struct DATASET
{
char firstname[12], lastname[12], gender;
int age, hours, minutes, seconds;
};

#define MaxRacers 10

int main()
{
int i;
DATASET data[MaxRacers];

char *places[MaxRacers];

char place1[6] = "First";
char place2[7] = "Second";
char place3[6] = "Third";
char place4[7] = "Fourth";
char place5[6] = "Fifth";
char place6[6] = "Sixth";
char place7[8] = "Seventh";
char place8[7] = "Eighth";
char place9[6] = "Ninth";
char place10[6] = "Tenth";

places[0] = place1;
places[1] = place2;
places[2] = place3;
places[3] = place4;
places[4] - place5;
places[5] = place6;
places[6] = place7;
places[7] = place8;
places[8] = place9;
places[9] = place10;


printf("%s", places[1]); // TEST which works fine

for(i = 0, i < MaxRacers; i = i + 1;)
{
printf("Enter the name of the %s finisher\n", places[i]); // Problem
}



getchar();
return(0);


}

现在我的事情更进一步了,我现在遇到了一个问题,一旦我输入完第一个完成者的姓氏,程序就会退出命令窗口并出现一个新窗口说:

“在 ConsoleApplication30.exe 中的 0x0FF6D0F1 (ucrtbased.dll) 抛出异常:0xC0000005:访问冲突写入位置 0xFFFFFFCC。

如果有这个异常的处理程序,程序可以安全地继续。”

#include <stdio.h>
#include <math.h>

struct DATASET
{
char firstname[12], lastname[12], gender;
int age, hours, minutes, seconds;
};

#define MaxRacers 10

int main()
{
int i;
DATASET data[MaxRacers];

char *places[] = { "First", "Second", "Third", "Fourth", "Fifth", "Sixth", "Seventh", "Eighth", "Ninth", "Tenth" };


for (i = 0; i < MaxRacers; i++)
{
printf("Enter the first name of the %s finisher:\n", places[i]);
scanf("%s", data[i].firstname);
printf("Enter the last name of the %s finisher:\n", places[i]);
scanf("%s", data[i].lastname);
printf("Enter the gender of the %s finisher: [m/f]: \n", places[i]);
scanf("%c", data[i].gender);
printf("Enter the age of the %s finisher:\n", places[i]);
scanf("%d", data[i].age);
printf("Enter the time of the %s finisher: [hh:mm:ss]\n", places[i]);
scanf("%d:%d:%d", data[i].hours, data[i].minutes, data[i].seconds);
printf("\n\n");
}




getchar();
return(0);


}

最佳答案

for(i = 0, i < MaxRacers; i = i + 1;)

for 循环不是那样工作的。试试这个:

for(i = 0; i < MaxRacers; i++)
// ^ ^
// | |
// semicolon here more idiomatic

此外,您应该使用惯用的字符数组初始化:

char *places[MaxRacers] = { "First", "Second", ... };

不仅因为它比你的 20 行 places 更容易打字,而且因为漏掉像

这样的错字的机会要少得多
places[3] = place4;
places[4] - place5; // <---- whoops
places[5] = place6;

当我们这样做的时候,

typedef struct DATASET
{ // whatever
};

意义不大。它不创建任何 typedef 名称,因此 typedef 一词是无用的。相当于

struct DATASET
{ // whatever
};

正因为如此,这个声明

DATASET data[MaxRacers];

在 C 中无效。它在 C++ 中有效,这可能意味着您正在使用 C++ 编译器。如果您正在学习 C,请确保您的源文件扩展名为 .c

关于c - 字符串数组,并打印这些元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40558011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com