Подтвердить что ты не робот

Как найти EOF через fscanf?

Я читаю матрицу через файл с помощью fscanf(). Как я могу найти EOF? Даже если я попытаюсь найти EOF после каждой строки, пойманной в arr [], то также я не могу ее найти.

с помощью count я читаю входной файл

-12 23 3

1 2 4

int main()
{
    char arr[10],len;
    int count=0;

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

    while(count!=7)
    {   
           fscanf(input,"%s",arr);
          //storing the value of arr in some array.
                   len=strlen(arr);
           count++;

           if(arr[len+1]==EOF)
           printf("\ni caught it\n");//here we have to exit.
    }
return 0;
}

Вместо счета я хочу выйти из цикла с помощью EOF. как это можно решить?

4b9b3361

Ответ 1

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

Итак, вместо того, чтобы ничего не делать с возвращаемым значением, как вы сейчас, вы можете проверить, не является ли оно == EOF.

Вы должны проверить EOF, когда вы вызываете fscanf, а не проверять слот массива для EOF.

Ответ 2

while (fscanf(input,"%s",arr) != EOF && count!=7) {
  len=strlen(arr); 
  count++; 
}

Ответ 3

Если у вас есть целые числа в вашем файле, fscanf возвращает 1 до тех пор, пока не произойдет целое число. Например:

FILE *in = fopen("./task.in", "r");
int length = 0;
int counter;
int sequence;

for ( int i = 0; i < 10; i++ ) {
    counter = fscanf(in, "%d", &sequence);
    if ( counter == 1 ) {
        length += 1;
    }
}

Чтобы узнать конец файла с символами, вы можете использовать EOF. Например:

char symbol;
FILE *in = fopen("./task.in", "r");

for ( ; fscanf(in, "%c", &symbol) != EOF; ) {
    printf("%c", symbol); 
}