我一直在编写一个程序,它接受输入并检查数字是偶数还是奇数,如果输入的字符不是我的初始代码的数字,则输出错误信息:
int main()
{
int x;
int check = scanf("%d", &x);
printf("input: ");
while(check != 1){ //means that the input is inappropriate
printf("Error!: unexpected input\n");
printf("input: ");
check = scanf("%d", &x);
}
if(x%2 == 0){
printf("It's even\n");
}else{
printf("It's odd\n");
}
return 0;
}
当我运行无限循环打印时“错误!:意外输入\ n”
但是当我在while循环中放入以下语句时它的工作正常,语句是:scanf("%s",&x);
有人可以解释这种行为吗?
答案 0 :(得分:0)
int check = scanf("%d", &x);
不消耗“输入是字符而不是数字”,将该输入留在stdin
中以用于下一个输入函数。由于下一个输入函数是check = scanf("%d", &x);
,因此它不会消耗有问题的数据,因此循环重复。
代码需要使用scanf("%d", ...)
以外的其他内容读取“输入是字符而不是数字”
建议不要使用scanf()
,而不是搞乱一点。阅读fgets()
或getline()
的输入,然后使用ssscanf()
,strtol()
等进行解析。
int main(void) {
int x;
char buf[100];
while (printf("input: "), fgets(buf, sizeof buf, stdin) != NULL) {
int check = sscanf(buf, "%d", &x);
if (check == 1) break;
printf("Error!: unexpected input\n");
}
if(x%2 == 0){
printf("It's even\n");
}else{
printf("It's odd\n");
}
return 0;
}