求解大佬,为啥我这个明明不满足循环条件还会一直输出
#include <stdio.h>int main() //题目是当输入的数不为数字时计算已经输入的数字的和
{
int num,sum = 0;
bool flag = 0;//我用的devc这么定义bool才不会报错。
while(flag != 1)\
{
printf("请输入合法的数字:");
scanf("%d",&num);
if(num >=0 &&num<= 9)
{
sum = sum + num;
}
else
{
flag = 1;
}
}
printf("结果为: %d\n",sum);
return 0;
}
//当我输入一个任意非数字字符时就会变成图里这样,我的水平现在止于小甲鱼的课程for循环那一节,大佬勿喷。 这个问题主要是由于输入的内容不合法导致的。当输入一个非数字字符时,`scanf()` 函数会将其识别为错误,并且不会将其从输入缓存区中清除。之后的循环中就会再次读取到这个非数字字符,导致程序陷入死循环。
解决此问题的一种方法是在读取 `num` 之前先清空输入缓存区中的所有内容。可以在 `scanf()` 前面加上 `fflush(stdin);` 语句,如下所示:
```c
#include <stdio.h>
int main() {
int num, sum = 0;
bool flag = 0;
while(flag != 1) {
printf("请输入合法的数字:");
fflush(stdin); // 清空输入缓存区
scanf("%d", &num);
if(num >= 0 && num <= 9) {
sum = sum + num;
} else {
flag = 1;
}
}
printf("结果为: %d\n", sum);
return 0;
}
```
另外,需要注意的是,在使用 `scanf()` 函数时,最好对其返回值进行判断。例如,如果输入的是一个非数字字符,`scanf()` 函数会返回 `0`。所以可以修改代码如下:
```c
#include <stdio.h>
int main() {
int num, sum = 0;
bool flag = 0;
while(flag != 1) {
printf("请输入合法的数字:");
fflush(stdin); // 清空输入缓存区
if(scanf("%d", &num) == 1) { // 对返回值进行判断
if(num >= 0 && num <= 9) {
sum = sum + num;
} else {
flag = 1;
}
} else {
printf("输入不合法,请重新输入数字\n");
}
}
printf("结果为: %d\n", sum);
return 0;
}
```
这样就可以更好地处理非数字字符的情况。 歌者文明清理员 发表于 2023-4-3 20:25
这个问题主要是由于输入的内容不合法导致的。当输入一个非数字字符时,`scanf()` 函数会将其识别为错误,并 ...
好的,谢谢大佬,还是我对scanf()的理解浅薄了。 1
页:
[1]