私はfscanf()の助けを借りてファイルを通して行列を読んでいます。 EOFを見つけるにはどうすればよいですか? EOFをすべての文字列がarr []でキャッチされた後に見つけようとしても、それを見つけることができません。
カウントの助けを借りて、入力ファイルを読んでいます
-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
。
fscanf
を呼び出すときは、EOFを確認する必要があります。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);
}