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

カウントする代わりに、EOFを使用してループを終了します。どうすれば解決できますか?

4

3 に答える 3

29

fscanf-「成功すると、関数は正常に読み取られたアイテムの数を返します。このカウントは、予想される読み取り数と一致するか、一致が失敗した場合はゼロになる可能性があります。入力が失敗した場合は、データが得られません。正常に読み取られると、EOFが返されます。」

したがって、現在のように戻り値を何もしない代わりに、それがであるかどうかを確認できます== EOF

fscanfEOFのアレイスロットをチェックするのではなく、呼び出すときに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 に答える