c程序忽略错误的变量类型输入后的所有scanfs
#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 = %dn", checka);
printf ("checkb = %d", checkb);
return EXIT_SUCCESS;
}
我在一个更大的程序中遇到了这个问题,但我写了一个快速测试,看看我能不能修复它,而我不能。
基本上,除了输入一个整数以外的任何一个scanf,程序会立即跳过并忽略每一个scanf,只是打印出它看到的其余程序,这意味着我不能用while循环进行检查,或者我只是得到作为循环中的scanf来修复变量的无限循环会被跳过。
显然,如果输入整数,这个特定的程序将返回1,最后两个printfs,这是预期的。 我究竟做错了什么?
谢谢!
有一个原因,我们应该检查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 = %dn", checka);
printf ("checkb = %d", checkb);
return EXIT_SUCCESS;
}
链接地址: http://www.djcxy.com/p/72193.html
上一篇: c program ignores all scanfs after wrong variable type input