我有问题吗?#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)
问题出在这一行代码上:
while(ch = getchar() != '\n')
这是因为!=运算符的优先级高于赋值运算符= ,所以ch的值被赋为getchar() != '\n'的结果,而不是getchar()的返回值。
解决这个问题的方法是使用括号明确指定赋值运算符的优先级,将代码修改为:
while((ch = getchar()) != '\n')
这样就能正确地将getchar()的返回值赋给ch ,并进行后续的判断和处理。 问题分析:
在这段代码中,出现了逻辑错误。错误出现在以下代码行:
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]