簡體   English   中英

將字符串和 integer 從文件讀取到結構中 - C

[英]Reading string and integer from file into struct - C

我希望這個問題與發布的另一個問題不太相似。 在這一點上,我仍在學習如何閱讀其他人的代碼,更不用說編寫自己的代碼了。 我對如何從文件中的一行讀取字符串和 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);
        }
    }
}

任何幫助表示贊賞。 Go 對我來說很容易:)

我認為正確掃描的主要問題是您閱讀與fgets()一致(明智之舉),然后嘗試從那里進行掃描。

scanf(line, "%s %d", name, amount);

但使用錯誤的 function 這樣做。 使用sscanf()
https://en.cppreference.com/w/c/io/fscanf

為了完整起見,讓我添加來自 Martin James 和 Jonathan Leffler 評論的貢獻:

你只能活兩次,但你只能返回一次:你的循環毫無意義

即,一旦你的for循環的任何迭代都有一個return ,並且所有這些迭代都有,你的while循環就完成了。

您調用 fopen() 但不分配(或檢查)返回值。 然后測試仍未初始化的 fpointer。 不是幸福的秘訣!

即這個

fopen("file.txt", "r");
if (fpointer == NULL)

應該

fpointer = fopen("file.txt", "r");
if (fpointer == NULL)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM