使用C中的do while循环进行数字验证

时间:2014-02-24 03:10:57

标签: c

我有这个运行一次的代码;然后我输入一些非数字文本并继续打印

  

输入种子

不执行scanf代码。

do {
    printf("Enter SEED: ");
    scanf("%d", &seed);
}
while (!isdigit(seed));

2 个答案:

答案 0 :(得分:2)

以前输入的尾随换行符被视为新输入,你需要吃掉它

避免使用scanf使用fscanf代替: -

int seed, ch;
do{
    printf("Enter SEED: ");
    if(fscanf(stdin, "%d", &seed) == 1)
        break;
    else 
       while( (ch = getchar()) != '\n' && ch != EOF); //Eat the trailing newline
}while(1);

答案 1 :(得分:1)

如果seed不是整数,它将保留在输入缓冲区中。 scanf("%d",&seed);仅从输入缓冲区中获取int个输入。如果用户输入char,您将不得不设计一些方法来摆脱缓冲区中的字符。

do {
    printf("Enter SEED: ");
    scanf("%c", &seed);
}
while (!isdigit(seed)); //isdigit() checks if seed is '1', '2', ... , '9'