关于while的条件停止问题
在问题中,(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),肯定停不下来了 #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;
}
这样就好了,你要先给ch赋值,然后再去判断ch是否为’\n‘ 本帖最后由 jhq999 于 2021-11-11 10:51 编辑
等号运算优先级低,不加括号就会想计算等号后面的然后赋值给ch
页:
[1]