0

続行するには整数を受け入れる必要があるCでプログラムを作成しています。次のコードを使用するためにいくつかの質問を読みましたが、文字を入力した直後にプログラムが無限ループに陥ります。助けてください

    int tnum,scancheck;
printf("Enter the number of teams(Maximum 4)\n");
scancheck = scanf("%d",&tnum);
while(scancheck != 1)
{
    printf("ERROR: Please enter numbers only\n\n");
    printf("Enter the number of teams(Maximum 4)\n");
    scancheck = scanf("%d",&tnum);  
}

Kirilenko の方法を使用しましたが、 l=などの特殊文字を入力すると、プログラムが無限ループに陥ります。

編集 の問題は解決されました。ありがとうございます

4

3 に答える 3

2

stdinへの呼び出しの間にクリーンアップする必要がありますscanf。それ以外の場合、scanf無効な入力に対する の動作は、文字をストリームに戻すことです。次に、反復ごとに同じ間違った文字を読み取る無限ループに移動します。

#include <stdio.h>

void clean_stdin(void) {
    int c;
    while ((c = getchar()) != '\n' && c != EOF)
        ;
}

/* ... */

int ret;
int n;

do {
   ret = scanf("%d", &n);
   clean_stdin();
} while (ret != 1);
于 2012-10-19T16:41:52.670 に答える
0

ユーザーから入力を取得したい場合は、行を取得して分析します。

char   line[1024];
char * err = NULL;
int    num;

while( err == NULL || *err )
{
   fgets( stdin, line );
   num = strtol( line, &err, 10 );
}

要件を満たすまで。

于 2012-10-19T16:53:46.460 に答える
-2

入力が無効な場合、Scanf は文字を stdin ストリームに戻します。stdin ストリームをクリアしていないため、無限ループに向かっています。

これをscanfステートメントの下に書いてみてください

fflush(stdin);
于 2012-10-19T16:42:48.973 に答える