这是一个循环判断字符的程序,但是我的else语句无条件执行,甚至在我输入其他字符时,oth自增两次,结果就是其他类型字符个数错误


这是一个循环判断字符的程序,但是我的else语句无条件执行,甚至在我输入其他字符时,oth自增两次,结果就是其他类型字符个数错误


关注引自免费微信小程序:皆我百晓生
在您提供的C语言代码中,存在一个可能导致else语句无条件执行的问题。问题出在第9行的循环条件上。您使用的是感叹号(!)作为结束条件,但这个字符在C语言中通常用于逻辑非操作。为了修复这个问题,您应该将循环的结束条件更改为换行符\n,这样当用户按下回车键时,循环就会停止。
下面是修改后的代码:
#include <stdio.h>
int main() {
int num = 0, eng = 0, oth = 0, sum = 0;
char x;
printf("请循环输入字符:\n");
while ((scanf(" %c", &x) == 1) && (x != '\n')) { // 修改循环条件为读取到非空格且不是换行符
if (x >= '0' && x <= '9') {
num++;
sum += x - '0';
} else if (x >= 'A' && x <= 'Z' || x >= 'a' && x <= 'z') { // 将小写字母和大写字母合并处理
eng++;
} else {
oth++;
printf("oth=%d\n", oth); // 移除这里,因为每次遇到其他字符都会打印oth值,这可能会导致计数不准确
}
}
printf("num=%d\neng=%d\noth=%d\n", num, eng, oth);
printf("sum=%d\n", sum);
return 0;
}
主要更改包括:
while(x!=!) 更改为 while((scanf(" %c",&x) == 1) && (x != '\n'))。这样只有在读取到非空格且不是换行符时,才会继续循环。else if语句中添加对大写字母的检查,以便统一处理字母(无论大小写)。这通过 (x >= 'A' && x <= 'Z' || x >= 'a' && x <= 'z') 实现。这段代码会正确地统计数字、字母和其他字符,并计算数字之和。同时,它会在循环结束后一次性显示oth的值,而不是每次遇到其他字符都打印。这样就不会影响oth的计数准确性。