2401_84320379 2024-04-12 14:59 采纳率: 100%
浏览 3
已结题

为什么我的else语句无条件执行了

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

img

img

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-12 14:59
    关注

    引自免费微信小程序:皆我百晓生

    在您提供的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;
    }
    

    主要更改包括:

    1. 将循环条件从 while(x!=!) 更改为 while((scanf(" %c",&x) == 1) && (x != '\n'))。这样只有在读取到非空格且不是换行符时,才会继续循环。
    2. else if语句中添加对大写字母的检查,以便统一处理字母(无论大小写)。这通过 (x >= 'A' && x <= 'Z' || x >= 'a' && x <= 'z') 实现。

    这段代码会正确地统计数字、字母和其他字符,并计算数字之和。同时,它会在循环结束后一次性显示oth的值,而不是每次遇到其他字符都打印。这样就不会影响oth的计数准确性。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月20日
  • 已采纳回答 4月12日
  • 创建了问题 4月12日