破译密码,运行后无结果?

img


######




#include <stdio.h>
int main()
{
    int i,j;
    char a[20];
    for(i=0;a[i]='\n';i++)
    {
        scanf("%c",a[i]);
            break;
    }
    for(j=0;j<=i;j++)
    {
            if(a[j]<='z'&&a[j]>='a'||a[j]<='Z'&&a[j]>='A')
                a[j]=a[j]+4;        
    }
    for(j=0;j<=i;j++)
        printf("%d",a[j]);
            
    return 0;
 } 
运行无结果

img

我的解答思路和尝试过的方法
能正确输出结果

 
 
#include <stdio.h>
int main()
{
    int i,j;
    char a[20];
    for(i=0;;i++)
    {
        //输入要加&
        scanf("%c",&a[i]);
            if(a[i]=='\n')break;
            
    }
    //最后一个a[i]是换行,所以下标应该是[0,i-1]
    i = i-1;
    for(j=0;j<=i;j++)
    {
        //超出字母范围的要从前开始
            if(a[j]<='z'&&a[j]>='a')
                a[j]='a' + (a[j]-'a'+4)%26;   
            else if(a[j]<='Z'&&a[j]>='A')
                a[j]='A' + (a[j]-'A'+4)%26;  
    }
    for(j=0;j<=i;j++)
    //输出字符用%c
        printf("%c",a[j]);
    return 0;
 } 

供参考:

#include<stdio.h>
int main()
{
    char a[256];
    int  i = 0;
    while ((a[i] = getchar()) && a[i] != '\n')
    {
        if (a[i] >= 'A' && a[i] <= 'Z')
            a[i] = (a[i] - 'A' + 4) % 26 + 'A';
        else if (a[i] >= 'a' && a[i] <= 'z')
            a[i] = (a[i] - 'a' + 4) % 26 + 'a';
        i++;
    }
    a[i] = '\0';
    printf("%s\n", a);
    return 0;
}