gpt4 book ai didi

在 while 循环中使用 scanf() 检查输入类型

转载 作者:行者123 更新时间:2023-11-30 17:19:12 26 4
gpt4 key购买 nike

我一直在编写一个程序,它接受输入并检查数字是偶数还是奇数,如果输入是字符而不是数字,则输出错误消息,我的初始代码是:

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);
有人可以解释这种行为吗?

最佳答案

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;
}

关于在 while 循环中使用 scanf() 检查输入类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28930673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com