Не могу прочитать данные из файла - PullRequest
0 голосов
/ 11 марта 2020
void
loadUsers(user userList[])
{
    int i, nUserAcc = 0;
    char c, temp[20];

    FILE *fp = fopen ("Users.txt", "r");

    if (fp == NULL)
        fp = fopen("Users.txt", "w");

    for (nUserAcc = 0; nUserAcc < MAX_USERS && feof(fp); nUserAcc++) {
        i = 0;
        c = 0;

        while (c != 32) {
            c = fgetc(fp);
            temp[i] = c;
            i++;
        }

        temp[i] = '\0';
        userList[nUserAcc].nID = atoi(temp);
        fgets(userList[nUserAcc].aPassword, 12, fp);
        userList[nUserAcc].aPassword[strlen(userList[nUserAcc].aPassword) - 1] = '\0';

        fgets(userList[nUserAcc].aName, 22, fp);
        userList[nUserAcc].aName[strlen(userList[nUserAcc].aName) - 1] = '\0';          

        fgets(userList[nUserAcc].aAddress, 32, fp);
        userList[nUserAcc].aAddress[strlen(userList[nUserAcc].aAddress) - 1] = '\0';

        fgets(temp, 20, fp);
        userList[nUserAcc].nContact = atoi(temp);
    }

    fclose(fp);
}

Итак, у меня есть этот код, в котором он должен загружать данные из файла User.txt и сохранять их в структурных массивах, но это не так, и я не знаю, где я ошибся.

1 Ответ

1 голос
/ 11 марта 2020

Как сказал @KamilCuk, использование feof () таким образом всегда может быть неправильным. Вы должны проверить, достигнут ли конец файла, пока вы читаете данные:

while (fgets(..)) {...}

Теперь к вашему вопросу:

Кажется, вы использовали неверное возвращаемое значение feof () в вашем for. Вы писали:

 for (nUserAcc = 0; nUserAcc < MAX_USERS && feof(fp); nUserAcc++) {...}

Но на самом деле: feof () возвращает нулевое значение, когда конец файла не произошел, в противном случае возвращается 1.

Другими словами, для l oop не произошло Измените на:

for (nUserAcc = 0; nUserAcc < MAX_USERS && !feof(fp); nUserAcc++) {...}

См. Пример здесь: https://www.includehelp.com/c-programs/feof-function-in-c-language-with-example.aspx

...