这个问题主要是由于输入的内容不合法导致的。当输入一个非数字字符时,`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;
}
```
这样就可以更好地处理非数字字符的情况。 |