不枉风来水顺 发表于 2023-10-7 09:52:37

我有问题吗?#C

#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)

isdkz 发表于 2023-10-7 09:52:55

问题出在这一行代码上:

while(ch = getchar() != '\n')


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

解决这个问题的方法是使用括号明确指定赋值运算符的优先级,将代码修改为:

while((ch = getchar()) != '\n')


这样就能正确地将getchar()的返回值赋给ch ,并进行后续的判断和处理。

Mike_python小 发表于 2023-10-7 09:53:28

问题分析:

在这段代码中,出现了逻辑错误。错误出现在以下代码行:


while (ch = getchar() != '\n')


该行代码的逻辑是想要循环读取输入的英文句子,直到遇到换行符为止。但是这里的逻辑有一个问题:由于运算符优先级的关系,!= 的优先级高于 =,所以实际上该行代码等价于:


while (ch = (getchar() != '\n'))


这样的写法会导致 ch 永远被赋值为 0 或 1,而不是输入的字符。

问题解决:

为了修正该问题,我们需要使用括号来明确赋值和比较的优先级。将代码修改如下:


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;
}


希望能够解决你的问题!如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 我有问题吗?#C