23

我在 fscanf() 的帮助下通过文件读取矩阵。我怎样才能找到EOF?即使我尝试在 arr[] 中捕获的每个字符串之后找到 EOF,我也无法找到它。

在计数的帮助下,我正在读取输入文件

-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;
}

而不是 count 我想通过 EOF 退出循环。怎么解决?

4

3 回答 3

29

fscanf- “成功时,该函数返回成功读取的项目数。此计数可以匹配预期的读数数,或者在匹配失败的情况下小于 - 甚至为零。在输入失败的情况下,任何数据都可以成功读取,返回EOF。”

因此,与其像现在这样对返回值不做任何事情,您可以检查它是否为== EOF.

您应该在调用时检查 EOF fscanf,而不是检查 EOF 的数组槽。

于 2012-08-21T04:51:45.113 回答
13
while (fscanf(input,"%s",arr) != EOF && count!=7) {
  len=strlen(arr); 
  count++; 
}
于 2012-08-21T04:53:25.003 回答
4

如果您的文件中有整数,则 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); 
}
于 2015-02-12T22:53:09.317 回答