使用scanf只输入整数?

时间:2017-04-18 20:30:33

标签: c integer scanf

我一直在研究需要整数输入的程序,但每次意外输入非整数时,scanf函数都会停止工作或陷入循环。

这是我尝试做的一个例子:

    int n;
    printf("please enter 0 or 1\n");
top:
    scanf("%i",&n);
    if(n == 0)
    {
        printf("you entered 0!\n");
    }
    if(n == 1)
    {
        printf("you entered 1!\n");
    }
    if(n != 0 && n != 1)
    {
        printf("please enter either 0 or 1.");
        goto top;
    }

如果您没有输入正确的号码,第三个是将您送回到顶部,但这对于字母和其他字符不起作用。 如果给出非整数输入,如何将其发送回顶部?

2 个答案:

答案 0 :(得分:0)

这可以通过使用以下内容替换scanf("%i",&n);调用来解决:

char buffer[256];
char *s = fgets(buffer, 256, stdin);

if (s != buffer)
{
    // Some error occurred
    goto top;
}

int error = sscanf(buffer, "%i", &n);

if (error == 0)
{
    // The string read is not a number!
    printf("please enter either 0 or 1.");
    goto top;
}

答案 1 :(得分:0)

试试这个

#include <stdio.h>

int main(void){
    int n;
    printf("please enter 0 or 1\n");

    for(;;){
        int status;
        char ch;
        status = scanf("%i%c", &n, &ch);//check return value of scanf, ch : for check rest input
        if(status == EOF){
            printf("Bye!!\n", n);
            return 0;
        } else if(status == 2 && ch == '\n'){
            if(n == 0 || n == 1){
                printf("you entered %i!\n", n);
                break;
            }
        } else {
            while(getchar() != '\n');//clear input
        }
        printf("please enter either 0 or 1.\n");
    }
    return 0;
}