第四个点过不去,求大佬帮帮忙

P1914 小书童——凯撒密码

蛇皮 @ 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]的值还是可以比较的,是这样吗


|