顶级太阳 发表于 2022-6-17 18:53:03

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;
}

jackz007 发表于 2022-6-17 21:24:26

      这一句有问题
      while((ch = getchar() !='\n'))
      改成这样
      while((ch = getchar()) != '\n')

临时号 发表于 2022-6-17 22:47:06

首先,在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-18 16:13:57

临时号 发表于 2022-6-17 22:47
首先,在C语言中,!=这个运算符的优先级比=大
那么,while((ch=getchar()!='\n'))的意思就是先判断getchar()! ...

谢谢,解释的很清楚。优先级问题,第二次入坑了。列入坑表,以后避免。感谢。
页: [1]
查看完整版本: s1e15 凯撒加密问题,求助我这个写法问题在哪里?