所以我一直在搜索你的网站,我仍然不清楚如何做到这一点,所以让我尽力解释这个。
我有一个像这样的输入文件:
2
Joe Flacco
1 3 5 6 7 8
Tom Brady
7 9 10 15 52 53
第一个数字是文件中“people”的数量,下一个是它们的名字和姓氏。接下来是[0,53]之间的6个英镑,这是他们的“彩票”数字。无论如何,我可以让我的代码输入第一个数字,但获得他们的名字和数字证明是很难的。
最后一部分是让它适合我们声明的结构(我们必须使用它,包含变量firstName [20] lastName [20]和数字[6]。我知道我的方法如何这一切都做得很好,但我发布了我的代码,所以你们可以看到我在做什么。我会提供任何和所有的帮助。而且,我试图学习如何做到这一点,而不是让你为我做一个程序,所以任何解释非常受欢迎。
for(int i=0; i < numPlays;i++)
{
char firstName[20];
char lastName[20];
for(int x=0; x<3;x++)
fscanf(fr, "%c", &firstName[x]);
for(int x=0; x<6;x++)
fscanf(fr, "%c", lastName[x]);
for(int g=0; g<6; g++)
{
fscanf(fr, "%d", &Steve.numbers[g]);
}
temp[i]= Steve;
//Tester code, lets hope this works
for(int x=0; x<3;x++)
printf("The persons name is %c.\n",&firstName[x]);
//printf("The persons last name is %c.\n",temp[i].lastName);
}
答案 0 :(得分:1)
使用fgets
strtok
和atoi
可以满足您的需求。至于你的程序结构,你可能想要这样的东西:
typedef struct Player {
char name[20];
int numbers[6];
} Player;
#define SIZE(x) (sizeof(x)/sizeof(*(x)))
Player readplayer(){
Player p;
int x;
char * num;
//read a line with fgets;
//memcpy() to p.name;
//read another line
for(num=strtok(line, " "),x=0;x<SIZE(p.numbers);x++, num=strtok(NULL," "))
p.numbers[x] = atoi(num);
return p;
}
int main()
{
//read a line with fgets
int x, nplayers = atoi(line);
Player *players = malloc(nplayers*sizeof(Player));
for(x=0;x<nplayers;x++)
players[x] = readplayer();
}
答案 1 :(得分:0)
您可以使用fgets()函数来实现此目的。它会将行读为String。读取数字作为字符串后,只需将其转换为整数。
答案 2 :(得分:0)
您可以将文件与文件分开并解析内容,即定义readline()
并独立解析每一行,example。