为什么不能输出移位后的字母

问题遇到的现象和发生背景 输入一个字母,后移三位。我这个代码为什么输出不了移位后的字母w。
用代码块功能插入代码,请勿粘贴截图 /在键盘输入一行小写英文句子,将其中所有的字母按字母表后移三位(即+3),标点符号和空格保持不变/

#include
int main()
{
char ch;
ch=getchar();
while(ch=!'\n')
{

    if(ch>='a'&&ch<'x')
    {printf("%c",ch+3);}
    if(ch>='x'&&ch<='z') 
    {printf("%c",ch-26);}
        else putchar(ch);
    ch=getchar();
    
    
    
}
printf("加密后为%c",ch);
    return 0;

}

运行结果及报错内容

img

去掉putchar语句前面的else