C语言简单的循环问题疑惑

【C语言简单循环结构问题】
加密字母字符,使字母往后推四个字母。大小写分开。如:Z变为D; E变为I;c变为g

遇到的现象和发生背景,请写出第一个错误信息

空格被读入w~z的判断语句中

#include<stdio.h>
int main()
{
    char c;
    c=getchar();
    while(c!='\0')
    {
        if((c>='a'&&c<='v')||(c>='A'&&c<='Z'))
        {
        putchar(c+4);
        c=getchar();
        }
        else if((c>='w'&&c<='z')||(c>='W'&&c<='Z'))
        {
        putchar(c-22);
        c=getchar();
        }
    }

}


运行结果及详细报错内容

字母加密没有问题,但是后面的非字母一直停不下来

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
{ if((c>='w'&&c<='z')||(c>='W'&&c<='Z'))
c=c-22;
else c+=4;
}//我尝试在判断W~Z之前判断是否为字母。

【我的问题】
1.请问第一个写法,我在调试的时候发现空格会被读入WZ的判断中,想请问一下,空格为什么会被读入WZ中间?谢谢您的解答,我会积极采纳的

c=getchar();放到while循环结束前,不要放在两个if里。