int main() { char input; int count = 0; while (input = getchar() != '\n') { printf("%c", input); if ((input>'A' && input <= 'Z') && input != 'E' && input != 'I' && input != 'O' && input != 'U') { count++; } } printf("%d", count); return 0; }为什么我这段c语言代码无法判断复印大写字母数量
时间: 2024-01-09 18:05:12 浏览: 80
精细金属掩模板(FMM)行业研究报告 显示技术核心部件FMM材料产业分析与市场应用
你的代码问题在于 `while (input = getchar() != '\n')` 这一行。
根据C语言的运算符优先级,`!=` 的优先级比 `=` 高,所以这一行代码的实际效果是,先将 `getchar()` 函数的返回值与 `'\n'` 进行比较,得到一个布尔类型的值,然后将这个布尔值赋给 `input` 变量。因此,`input` 变量实际上存储的是 `getchar() != '\n'` 的结果,而不是输入的字符。
解决这个问题的方法是通过加括号来改变优先级,即将 `input = getchar() != '\n'` 改为 `(input = getchar()) != '\n'`。这样,先执行 `getchar()` 函数,获取输入的字符,然后将这个字符赋给 `input` 变量,最后再将 `input` 与 `'\n'` 进行比较,得到一个布尔值。
另外,你的代码中,`input` 变量应该声明为字符型,即 `char input;`,而不是整型。
修改后的代码如下:
```c
#include <stdio.h>
int main() {
char input;
int count = 0;
while ((input = getchar()) != '\n') { // 注意加括号改变优先级
printf("%c", input);
if (input >= 'A' && input <= 'Z' && input != 'E' && input != 'I' && input != 'O' && input != 'U') {
count++;
}
}
printf("%d", count);
return 0;
}
```
这个代码可以正确地读入输入的字符串,并统计其中大写辅音字母的数量。
阅读全文