|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#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;
- }
复制代码
```
这样就可以更好地处理非数字字符的情况。
|
|