鱼C论坛

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

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

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

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

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

x
没有看出来我这个写法的问题,求教,哪里错了,为何没有输出呢?
#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;
}
最佳答案
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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-17 21:24:26 | 显示全部楼层
        这一句有问题
        while((ch = getchar() !='\n'))
        改成这样
        while((ch = getchar()) != '\n')
想知道小甲鱼最近在做啥?请访问 -> 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()的优先级
#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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢,解释的很清楚。优先级问题,第二次入坑了。列入坑表,以后避免。感谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-17 20:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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