蛇皮 @ 2020-01-12 22:09:20
#include<stdio.h>
char a[100];
int main()
{
int n;
scanf("%d",&n);
scanf("%s",a);
n%=26;
int i=0;
while(a[i]!=0)
{
a[i]+=n;
if(a[i]>'z')
a[i]-=26;
printf("%c",a[i]);
i++;
}
return 0;
}
by NujObIuc @ 2020-01-12 22:27:51
@K1317 a[i]+n可能超过127,就越界了
by NujObIuc @ 2020-01-12 22:28:50
你可以特判一下
by NujObIuc @ 2020-01-12 22:40:33
#include<stdio.h>
char a[100];
int main()
{
int n;
scanf("%d",&n);
scanf("%s",a);
n%=26;
int i=0;
while(a[i]!=0)
{
if(a[i]+n>'z'){
a[i]-=26;
a[i]+=n;
}
else{
a[i]+=n;
}
printf("%c",a[i]);
i++;
}
return 0;
}
if里边的a[i]+n就不会越界,因为a[i]是char类型的,而n是int类型的,两者做运算时绘自动将类型低的转换成类型高的。而出现a[i]+=n时是直接把n加到a[i]上,不会发生类型转换,自然会越界。
一般情况下,整型类型从低到高是这样的
char->short int->int->long long
by 蛇皮 @ 2020-01-13 09:53:43
@初逢题库 就是说当他的值超出char的范围时,就不能与‘z’比较大小。但是在if语句中a【i】还未超出,加上一个数不算入a[i]的值还是可以比较的,是这样吗