鱼C论坛

 找回密码
 立即注册
查看: 984|回复: 2

[已解决]我有问题吗?#C

[复制链接]
发表于 2023-10-7 09:52:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
int main()
{
        int num1,num2,num3,num4,num5;
        char ch;
        printf("请输入一个英文句子:");
        while(ch = getchar() != '\n')
        {
                switch(ch)
                {
                        case 'a':num1 = num1 + 1;break;
                        case 'A':num1 = num1 + 1;break;
                        case 'e':num2 = num2 + 1;break;
                        case 'E':num2 = num2 + 1;break;
                        case 'i':num3 = num3 + 1;break;
                        case 'I':num3 = num3 + 1;break;
                        case 'o':num4 = num4 + 1;break;
                        case 'O':num4 = num4 + 1;break;
                        case 'u':num5 = num5 + 1;break;
                        case 'U':num5 = num5 + 1;break;
                }
        }
        printf("您输入的句子中共有元音字母%d个\n",num1+num2+num3+num4+num5);
        printf("你输入的句子中:a(%d),e(%d),i(%d),o(%d),u(%d)\n",num1,num2,num3,num4,num5);
        return 0;
}



运行如下,为什么只检索到了一个e???
请输入一个英文句子:I love FishC.com
您输入的句子中共有元音字母1个
你输入的句子中:a(0),e(1),i(0),o(0),u(0)

最佳答案
2023-10-7 09:52:55
问题出在这一行代码上:
while(ch = getchar() != '\n')

这是因为  !=  运算符的优先级高于赋值运算符  = ,所以  ch  的值被赋为  getchar() != '\n'  的结果,而不是  getchar()  的返回值。

解决这个问题的方法是使用括号明确指定赋值运算符的优先级,将代码修改为:
while((ch = getchar()) != '\n')

这样就能正确地将  getchar()  的返回值赋给  ch ,并进行后续的判断和处理。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-7 09:52:55 | 显示全部楼层    本楼为最佳答案   
问题出在这一行代码上:
while(ch = getchar() != '\n')

这是因为  !=  运算符的优先级高于赋值运算符  = ,所以  ch  的值被赋为  getchar() != '\n'  的结果,而不是  getchar()  的返回值。

解决这个问题的方法是使用括号明确指定赋值运算符的优先级,将代码修改为:
while((ch = getchar()) != '\n')

这样就能正确地将  getchar()  的返回值赋给  ch ,并进行后续的判断和处理。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-7 09:53:28 | 显示全部楼层
问题分析:

在这段代码中,出现了逻辑错误。错误出现在以下代码行:
while (ch = getchar() != '\n')
该行代码的逻辑是想要循环读取输入的英文句子,直到遇到换行符为止。但是这里的逻辑有一个问题:由于运算符优先级的关系,!= 的优先级高于 =,所以实际上该行代码等价于:
while (ch = (getchar() != '\n'))
这样的写法会导致 ch 永远被赋值为 01,而不是输入的字符。

问题解决:

为了修正该问题,我们需要使用括号来明确赋值和比较的优先级。将代码修改如下:
while ((ch = getchar()) != '\n')
经过以上修改,代码应该能够正确统计输入句子中的元音字母数量。

完整修改后的代码如下:
#include <stdio.h>int main() {    int num1 = 0, num2 = 0, num3 = 0, num4 = 0, num5 = 0;    char ch;    printf("请输入一个英文句子:");    while ((ch = getchar()) != '\n') {        switch(ch) {            case 'a':            case 'A':                num1++;                break;            case 'e':            case 'E':                num2++;                break;            case 'i':            case 'I':                num3++;                break;            case 'o':            case 'O':                num4++;                break;            case 'u':            case 'U':                num5++;                break;        }    }    printf("您输入的句子中共有元音字母%d个\n", num1 + num2 + num3 + num4 + num5);    printf("你输入的句子中:a(%d),e(%d),i(%d),o(%d),u(%d)\n", num1, num2, num3, num4, num5);    return 0;}
希望能够解决你的问题!如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 01:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表