C语言程序设计问题.

把输入的字母按照字母表顺序往后移3位并输出,这串代码问题在哪里?

#include <stdio.h>
#include <ctype.h>

int main()
{
    char ch;
    while ((ch = getchar()) != EOF)
    {
        if (isupper(ch))
            ch = (ch - 'A' + 3) % 26 + 'A';
        else if (islower(ch))
            ch = (ch - 'a' + 3) % 26 + 'a';
        putchar(ch);
    }
    return 0;
}

代码呢?