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 会将字符放回标准输入流。因为,我们没有清除标准输入流,它正在走向一个无限循环。

试着在你的 scanf 语句下面写这个

fflush(stdin);
于 2012-10-19T16:42:48.973 回答