Как найти 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. как это можно решить?

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

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

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

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

Если в вашем файле есть целые числа, 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); }