s1e15 凯撒加密问题,求助我这个写法问题在哪里?
没有看出来我这个写法的问题,求教,哪里错了,为何没有输出呢?#include<stdio.h>
char ch,chg;
int main()
{
printf("请输入明文:");
while((ch=getchar()!='\n'))
{
if(ch>='a'&& ch<='w')chg=ch+3;
if(ch>='A'&& ch<='W')chg=ch+3;
if(ch>'w'&& ch<='z') chg=ch-23;
if(ch>'W'&& ch<='Z')chg=ch-23;
printf("%c",chg);
}
printf("\n");
return 0;
}
这一句有问题
while((ch = getchar() !='\n'))
改成这样
while((ch = getchar()) != '\n') 首先,在C语言中,!=这个运算符的优先级比=大
那么,while((ch=getchar()!='\n'))的意思就是先判断getchar()!='\n'的结果,一开始肯定是条件满足,所以这个表达式返回1,然后再执行ch=1
由于ch=1,所以进了while循环,因为ch=1,所以chg=ch-23,但是由于chg是char类型的,而char类型没有负数,所以chg最少只能等于0
然后你输出了chg,由于chg=0,而0在ASCII编码中是不可见的字符,所以你会看起来什么也没输出
解决办法就是增加ch=getchar()的优先级
#include<stdio.h>
char ch,chg;
int main()
{
printf("请输入明文:");
while((ch=getchar())!='\n')
{
if(ch>='a'&& ch<='w')chg=ch+3;
if(ch>='A'&& ch<='W')chg=ch+3;
if(ch>'w'&& ch<='z') chg=ch-23;
if(ch>'W'&& ch<='Z')chg=ch-23;
printf("%d",ch);
}
printf("\n");
return 0;
}
临时号 发表于 2022-6-17 22:47
首先,在C语言中,!=这个运算符的优先级比=大
那么,while((ch=getchar()!='\n'))的意思就是先判断getchar()! ...
谢谢,解释的很清楚。优先级问题,第二次入坑了。列入坑表,以后避免。感谢。
页:
[1]