pta字符串替换中的小细节问题

问题遇到的现象和发生背景

pta二维数组与字符数组练习题

img

用代码块功能插入代码,请勿粘贴截图
#include
int main()
{
    int i=0,k;
    char a[82];
for(i=0;a[i]!='\n'&&i<=80;i++) {scanf("%c",&a[i]);
                         if(a[i]>='A'&&a[i]<='Z') a[i]='A'+'Z'-a[i];}
    for(k=0;a[k]!='\n';k++)
        printf("%c",a[k]);
    return 0;
}

运行结果及报错内容

只有当a[ ]里面的数字大于或等于82且第一个for循环中循环条件不能少{ i<=80(而且只能是80) },时才正常运行,否则要么 段错误 要么 不是满分

我想要达到的结果

我想知道这是什么原因,恳求回答

修改如下,供参考:

#include <stdio.h>
int main()
{
    int i=0;
    char a[81];
    scanf("%[^\n]", a);
    for(i = 0; a[i]; i++)
    {
        if(a[i] >= 'A' && a[i] <= 'Z')
            a[i] = ('A' - a[i] + 25) % 26 + 'A';
    }
    printf("%s", a);
    return 0;
}