我希望这个问题和另一个发帖的问题不要太相似。我现在还在学习如何阅读别人的代码,更不用说写自己的代码了。我很困惑,如何从文件中的一行中读取字符串和int,并将其存储在一个名为People的结构中.我一直在寻找fgets,fscanf甚至fread,但我不知道该用什么,在哪里使用它.我从一个最多10个条目的文件中获取数据,看起来像这样。
Joshua 50
Dwayne 90
Jennifer 45
Goldilocks 85
这是我的代码
typedef struct
{
char *name[20];
int change_amount;
int fifties;
int twenties;
int tens;
int fives;
}People;
int get_file()
{
const int MAXPEOPLE = 10;
People persons[MAXPEOPLE];
int i = 0;
FILE *fpointer;
char line[12];
fopen("file.txt", "r");
if (fpointer == NULL)
{
perror("Error opening file");
return (0);
}
while (fgets(line, 8, fpointer) != NULL)
{
//Max number of letters for name under assumption is 8
char name[8];
int amount = 0;
scanf(line, "%s %d", name, amount);
printf("%s", name);
memset(line, 0, 8);
for (int i = 0; i < MAXPEOPLE; ++i)
{
return(0);
}
}
}
任何帮助都是感激的。对我好一点:)
我觉得把扫描搞好的主要问题是,你读到的行与 fgets()
(明智之举),然后尝试从那里扫描。
scanf(line, "%s %d", name, amount);
但使用了错误的功能来进行。使用 sscanf()
. https:/en.cppreference.comwciofscanf。
为了完整起见,让我补充一下Martin James和Jonathan Leffler评论中的贡献。
你只能活两次,但你只能回来一次:你的循环是没有意义的。
即一旦你的任何一次迭代的 for
循环有 return
他们都有,你的 while
循环结束。
调用fopen(),但不分配(或检查)返回的值。然后测试仍然未初始化的fpointer。这不是一个幸福的秘诀
也就是说,这个
fopen("file.txt", "r");
if (fpointer == NULL)
应是
fpointer = fopen("file.txt", "r");
if (fpointer == NULL)