从文件中读取字符串和整数到结构中 - C

问题描述 投票:0回答:1

我希望这个问题和另一个发帖的问题不要太相似。我现在还在学习如何阅读别人的代码,更不用说写自己的代码了。我很困惑,如何从文件中的一行中读取字符串和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);
        }
    }
}

任何帮助都是感激的。对我好一点:)

c struct scanf fopen fgets
1个回答
1
投票

我觉得把扫描搞好的主要问题是,你读到的行与 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)
© www.soinside.com 2019 - 2024. All rights reserved.