|
9鱼币
在问题中,
(ch = getchar()) != '\n' 与 ch = getchar() && ch != '\n' 分别作为while的停止条件,但是句1能停止,另句2不能,求助原因.
代码如下:
- #include <stdio.h>
- int main()
- {
- int ch, count = 0;
- printf("请输入一行英文句子:");
- while ((ch = getchar()) != '\n')
- {
- if (ch >= 'A' && ch <= 'Z')
- {
- count = count + 1;
- }
- }
- printf("你总共输入了%d个大写字母!\n", count);
- return 0;
- }
复制代码
==================================================
- #include <stdio.h>
- int main()
- {
- int ch, count = 0;
- printf("请输入一行英文句子:");
- while (ch = getchar() && ch != '\n')
- {
- if (ch >= 'A' && ch <= 'Z')
- {
- count = count + 1;
- }
- }
- printf("你总共输入了%d个大写字母!\n", count);
- return 0;
- }
复制代码
本帖最后由 hrpzcf 于 2021-11-11 10:51 编辑
赋值运算符 = 的优先级是比逻辑与运算符 && 优先级第的,即 - ch = getchar() && ch != '\n'
复制代码相当于 - ch = (getchar() && ch != '\n')
复制代码这逻辑就不对了,刚开始运行ch是垃圾值,ch != '\n' 十有八九是真,getchar()返回非0也是真,整个表达式就是 ch = 1,赋值表达式 ch = 1 的值也是 1,最终结果就是 while (1),肯定停不下来了
|
最佳答案
查看完整内容
赋值运算符 = 的优先级是比逻辑与运算符 && 优先级第的,即相当于这逻辑就不对了,刚开始运行ch是垃圾值,ch != '\n' 十有八九是真,getchar()返回非0也是真,整个表达式就是 ch = 1,赋值表达式 ch = 1 的值也是 1,最终结果就是 while (1),肯定停不下来了
|