c语言 ascii字符串后移n位

输入不包含空格的文字列(最大64个文字)和大于等于-100小于等于100的数字n,输出把原字符串按字母表移动n次的字符串。
输入的n不是数字时,输出 not number;
输出的n小于-100时 输出 -101 or less;
输出的n大于100时,输出 101 or more;
(文字列内除字母外的其他数字、字符不变,大写字母小写字母不互换,z右移一位为a)

char str[200];
scanf("%s",str);
int n;
int r = scanf("%d",&n);

if(r!=1){
printf("Input Error : not number");
return 0;
}

if(n<-100){
printf("Input Error : -101 or less");
return 0;
}

if(n>100){
printf("Input Error : 101 or more");
return 0;
}

for(int i=0;str[i]!='\0';i++){

 if ('a' <= str[i] && str[i] <= 'z') {
         str[i] = (str[i] - 'a' + 26 + n) % 26 + 'a';
     } else if ('A' <= str[i] && str[i] <= 'Z') {
         str[i] = (str[i] - 'A' + 26 + n) % 26 + 'A';
     }

}
printf("%s",str);

return 0;
}

有一个testcase怎么改都是错的,但我看不到testcase的具体内容,也不知道是什么错误。求问程序应该怎么修改呢,谢谢。

img

scanf("%s",str);接收不了空格,是不是空格引起的错误

这篇文章:c语言 由字符串转ASCII码 也许有你想要的答案,你可以看看