2016-09-10 34 views
-7

整数入力を取得しようとしていますが、私が見つけた最も基本的な方法を試しました。しかし、何かが整数でないときはいつも、無限ループに陥ってしまいます。私はそれがfgetsの機能によって引き起こされたと信じています。私はこのサイトで見つけたいくつかのソリューションを試しましたが、うまくいきませんでした。無限のfgetsループに詰まった

int getint() 
{ 
    int number; 
    char input[4]; 

    fgets(input, 4, stdin); 
    while (atoi(input) < 0 || (strcmp(input, "0") != 0 && atoi(input) == 0)) 
     printf("Insert a non negative number: "); 
     fgets(input, 4, stdin); 
    number = atoi(input); 
    printf("%d\n", number); 

    return number; 
} 
+4

インデントがフローメイクを制御しません。 –

+3

複数行のコードブロックには中括弧が必要です。 – Li357

+1

@KerrekSB PythonとLuaが漏れているようです。 – EOF

答えて

0

を次のようにあなたは、あなたがループに来たステートメントを定義するために括弧{}を使用する必要があり、文のループに場合や、書きたい複数のステートメントがある場合はコードがあります。

コードでは、printf("Insert a non negative number: ");ステートメントだけがループ内にあり、ループ内のinputの値は変更されません。したがって、ループの条件がtrueの場合は常にtrueになります。

に変更し、それを:

while (atoi(input) < 0 || (strcmp(input, "0") != 0 && atoi(input) == 0)) 
{ 
    printf("Insert a non negative number: "); 
    fgets(input, 4, stdin); 
} 
+0

私は今、恥ずかしいです、助けてくれてありがとう。 –

関連する問題