在C中验证整数

时间:2012-10-19 16:38:28

标签: c validation input integer validating

我在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);  
}

我使用了基里连科的方法但是我的程序在输入特殊字符时会进入无限循环,例如 l =

修改 问题已经解决。谢谢你们

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

如果您希望获得用户的输入,请获取该行并进行分析。

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

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

直到满足要求。

答案 2 :(得分:-2)

如果输入无效,则Scanf将字符放回stdin流。因为,我们没有清除stdin流,它将走向无限循环。

尝试在scanf声明下面写这个

fflush(stdin);