2016-07-16 37 views
1

fscanfが無限ループに陥る問題があります。 {無限ループfscanf in C

char num; 

FILE *filePtr; 

if ((filePtr = fopen("filename.txt", "r")) == NULL) 
{ 
    printf("File could not be opened"); 
} 
else 
{ 
    while (fscanf(filePtr, "%20[^ ,]", &num) != EOF) 
    { 
     displayFun(num); 
    } 

} 

return 0; 

私はそれを読むために必要なファイルの入力である: 0、1、2、3、16、17、1234、5678、-201、65534、65535、65536、-1

何らかの理由で、コードがループでスタックし、最初のゼロが残り、他の数に続くことはありません。

+1

あなたの 'fscanf'呼び出しは成功すると' 1'を返します。そのため、 'EOF'ではなく、それと比較してください。 – melpomene

+3

私はあなたが1つの 'char'に20文字を格納できないと確信しています。 – melpomene

+0

[なぜループ状態の中のiostream :: eofが間違っていると思われるのですか?](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) – Eiko

答えて

2

"%20[^ ,]"は、,またはスペースを消費しません。彼らは次のfscanf()コールのためにfilePtrに留まります。コードは何とか,とスペースを読み取る必要があります。 @melpomeneとして

が動作しませんcharに文字列としてテキストを読む、コメント、

int,ではなくを読むことをお勧めします。

int number; 
while (fscanf(filePtr, "%d,", &number) == 1) { 
    displayFun(num); 
}