c程序在输入错误的变量类型后忽略所有scanfs

时间:2015-11-06 18:28:43

标签: c validation scanf

#include <stdio.h>
#include <stdlib.h>

int main(void) {

   int a, b, checka, checkb;

   printf ("enter a: ");
   checka = scanf ("%d", &a);

   printf ("enter b: ");
   checkb = scanf ("%d", &b);

   printf ("checka = %d\n", checka);
   printf ("checkb = %d", checkb);



   return EXIT_SUCCESS;
}

我在一个更大的程序中遇到了这个问题,但我写了一个快速测试,看看我是否可以解决它,我不能。

基本上,当为scanf输入除整数之外的任何内容时,程序会立即跳过并忽略所有其他scanf并打印出它看到的其余程序,这意味着我无法使用while循环进行检查,或者我只是得到一个无限循环,因为循环中的scanf来修复变量只是被跳过了。

显然,如果输入整数,则此特定程序将为最后两个printfs返回1,这是预期的。 我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:2)

有一个原因我们应该检查scanf的错误,试试这个:

#include <stdio.h>
#include <stdlib.h>

int main(void) {

    int a, b, checka, checkb;

    printf ("enter a: ");
    if((scanf ("%d", &a)) == 1){
        checka = a;
    }else{
        printf("Error(1)!");
        exit(EXIT_FAILURE);
    }


    printf ("enter b: ");
    if((scanf ("%d", &b)) == 1){
        checkb = b;
    }else{
        printf("Error(2)!");
        exit(EXIT_FAILURE);
    }

    printf ("checka = %d\n", checka);
    printf ("checkb = %d", checkb);

    return EXIT_SUCCESS;
}