鱼C论坛

 找回密码
 立即注册
查看: 1621|回复: 3

[已解决]s1e15 凯撒加密问题,求助我这个写法问题在哪里?

[复制链接]
发表于 2022-6-17 18:53:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
没有看出来我这个写法的问题,求教,哪里错了,为何没有输出呢?
  1. #include<stdio.h>

  2. char ch,chg;


  3. int main()
  4. {
  5.   

  6.    printf("请输入明文:");
  7.     while((ch=getchar()!='\n'))
  8.      {
  9.         if(ch>='a'&& ch<='w')chg=ch+3;
  10.         if(ch>='A'&& ch<='W')chg=ch+3;
  11.         if(ch>'w'&& ch<='z') chg=ch-23;
  12.         if(ch>'W'&& ch<='Z')chg=ch-23;
  13.         printf("%c",chg);
  14.         

  15.      }
  16.     printf("\n");
  17. return 0;
  18. }
复制代码
最佳答案
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()的优先级
  1. #include<stdio.h>

  2. char ch,chg;


  3. int main()
  4. {
  5.   

  6.    printf("请输入明文:");
  7.     while((ch=getchar())!='\n')
  8.      {
  9.         if(ch>='a'&& ch<='w')chg=ch+3;
  10.         if(ch>='A'&& ch<='W')chg=ch+3;
  11.         if(ch>'w'&& ch<='z') chg=ch-23;
  12.         if(ch>'W'&& ch<='Z')chg=ch-23;
  13.         printf("%d",ch);
  14.         

  15.      }
  16.     printf("\n");
  17. return 0;
  18. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-6-17 21:24:26 | 显示全部楼层
        这一句有问题
  1.         while((ch = getchar() !='\n'))
复制代码

        改成这样
  1.         while((ch = getchar()) != '\n')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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()的优先级
  1. #include<stdio.h>

  2. char ch,chg;


  3. int main()
  4. {
  5.   

  6.    printf("请输入明文:");
  7.     while((ch=getchar())!='\n')
  8.      {
  9.         if(ch>='a'&& ch<='w')chg=ch+3;
  10.         if(ch>='A'&& ch<='W')chg=ch+3;
  11.         if(ch>'w'&& ch<='z') chg=ch-23;
  12.         if(ch>'W'&& ch<='Z')chg=ch-23;
  13.         printf("%d",ch);
  14.         

  15.      }
  16.     printf("\n");
  17. return 0;
  18. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢,解释的很清楚。优先级问题,第二次入坑了。列入坑表,以后避免。感谢。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 01:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表