数组定义在main外导致数据出错

数组也不大呀 题源:洛谷1598
#上代码

#include
#include
#include
using namespace std;
int main()
{
int i,j,n,maxn=0,ff[26];char a[81];
for(i=0;i<4;i++)
{
gets(a);//gets读入
n=strlen(a);
for(j=0;j<n;j++)if(a[j]>='A'&&a[j]<='Z')ff[a[j]-'A']++;//统计字符出现次数
}
for(i=0;i<26;i++)maxn=max(maxn,ff[i]);//最多次数(最高柱状图)
for(i=maxn;i>0;i--){
for(j=0;j<26;j++)
if(ff[j]>=i)printf("* ");else printf(" ");//模拟,是可以输出的就输出*,否则跳过
printf("\n");}//换行
for(i=0;i<26;i++)printf("%c ",i+'A');//输出a~z
}

修改如下,供参考:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define max(a,b) (a)>(b)?(a):(b)
int main()
{
    int i, j, n, maxn = 0, ff[26]={0}; 
    char a[81]={0};
    for (i = 0; i < 3; i++)
    {
        gets(a);//gets读入
        n = strlen(a);
        for (j = 0; j < n; j++)
            if (a[j] >= 'A' && a[j] <= 'Z') ff[a[j] - 'A']++;//统计字符出现次数
    }
    for (i = 0; i < 26; i++) maxn = max(maxn, ff[i]);//最多次数(最高柱状图)
    for (i = maxn; i > 0; i--) {
        for (j = 0; j < 26; j++)
            if (ff[j] >= i)
                printf("* "); 
            else 
                printf("  ");//否则跳过
        printf("\n");
    }//换行
    for (i = 0; i < 26; i++)
        printf("%c ", i + 'A');//输出a~z
    return 0;
}

img

你这代码乱七八糟
前面输入的时候循环4次,后面为什么变成26次,数据哪来的,什么时候赋值的?