Не могу прочитать текстовый файл в C - PullRequest
0 голосов
/ 08 февраля 2019

Здравствуйте, у меня возникла проблема. Я пытаюсь решить проблему и узнать, как работает обучение по файлам. Я сделал этот код с помощью учебника, и когда я выполняю вместо того, чтобы изучать свой файл и писать на консоли что-то вроде 1 4 6 5 1 и т. Д.Это просто спам только 0 0 0 0 0 0 0 и затем повторите Если вы скажете мне, где проблема, это будет хорошо, спасибо за ваше время :)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


#define UNUSED(__ARG__) ((void)__ARG__)

int main(int argc, char** argv)
{
    UNUSED(argc);
    UNUSED(argv);

    int i = 0;
    FILE* x =fopen("cisla.txt","r");
     fscanf(x,"%d",&i);
 while (!feof (x))
 {
     printf("%d",i);
     fscanf(x,"%d",&i);


 }
 fclose(x);


return 0;
}

1 Ответ

0 голосов
/ 08 февраля 2019

Что бы это ни было за учебное пособие, выбросьте его.

Сначала вам нужно проверить, успешно ли выполнялись ваши файловые операции, в противном случае программа продолжит работу вслепую.Вероятно, fopen не удалось.Он возвращает NULL при ошибке, так что вы можете проверить это и получить сообщение об ошибке с perror.

FILE *x = fopen("cisla.txt","r");
if( x == NULL ) {
    perror("Could not open the file");
    exit(1);
}

Затем, как уже упоминали другие, вы надеваетене проверять конец файла .Вместо этого выполните операцию ввода-вывода и проверьте, успешно или неудачно.В этом случае fscanf возвращает количество подходящих элементов, которое должно быть 1.

while ( fscanf(x, "%d", &i) == 1 ) {
    printf("%d",i);
}

Обратите внимание, что семейство scanf чревато готчами .Но вы дойдете до них позже.

Наконец, этот материал UNUSED очень умный и совершенно ненужный.Просто объявите main без аргументов. Это совершенно верно .

int main() {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...