循环次数似乎出了错,但不明白为什么?

输入:第一行是一个整数n,为总的字母数目(n<=52)。
接下来n行,每行一个英语字母。
输出:一共n行,每行输出对应英语字母的后一个字母。(z后输出空格)

例子输入:
5

E

z

L

P

Y
例子输出:
F

M

Q

Z

我的代码:

int num;
    scanf("%d",&num);
    char zimu;
    for(int i=0;i<num;i++){
                 scanf("%c",&zimu);
                 if((zimu>='a'&&zimu<'z')||(zimu>='A'&&zimu<'Z')){printf("%c\n",zimu+1);}
                 else if(zimu=='z'||zimu=='Z'){printf(" \n");}
                 }
    return 0;

循环次数似乎是不对的,跑代码的时候,连带输入输出一共只能五行(比如num=5,控制台上有五行就停止了)
只有把i<num改成num*2,才是对的。
但为什么呢?循环i<num,不是要等我输入num次(输入显示出num行)后才停止吗?

因为回车也是一个字符,在第5行上面加getchar();读取掉回车

处理一下换行回车符

        getchar();
        scanf("%c", &zimu);