本题最大的坑在于:
windows环境下的换行符为\r\n,linux环境的换行符为\n.
我们再来看看洛谷的部分OJ判题机数据和机制

常见“我在本地/xxOJ AC了、洛谷却不过”的原因
Linux中换行符是’\n’而Windows中是’\r\n’(多一个字符),有些数据在Windows中生成,而在洛谷评测机Linux环境下评测。这种情况在字符串输入中非常常见。
来源帮助-洛谷

所以我们要用

ch=getchar();
while(ch=='\r'&&ch=='\n')
    ch=getchar();

来确保自己读取的不是换行符或者云云。

接下来是其他一些小坑的解析和具体代码
可以选择观看

  1. 因为char类型上限为127,‘z’=122,所以很容易爆掉char,
    我这里采用的解决方法是先转化为大写字母,然后输出时再转化为小写字母。
  2. z+1=a,注意这个loop
  3. 判题机输入字符串时不会有回车

可以AC了

#include<iostream>
#include<ctype.h>
using namespace std;
int main(void) {
   
    char ch;
    int n;
    cin >> n;
    //不是很支持cin,cout和printf,scnaf混用,这在有的OJ(如POJ)上会报错,请各位注意。
    ch = getchar();
    while (ch == '\r'||ch=='\n') {
   
        ch = getchar();
    }//吸掉换行
    while (isalpha(ch))//结束表示
    {
   
        ch = toupper(ch) + n;
        if (ch > 'Z')
        {
   
            ch -= 26;
        }
        printf("%c", tolower(ch));
        ch = getchar(); 
    }
    return 0;
}