哪里出错了关于数组的问题

输入:
为N个数字,以空格间隔。

输出:
第一行为一个整数,即N的个数,第二行为0~20中不同数的个数。
不知道为什么我的代码最后20的个数总是不对

```c
#include
int main() {
int ge[20], i, a, b, c = 0, shu[100000];
for (i = 0; i <= 20; i++) {
ge[i] = 0;
}
while (scanf("%d", &shu[c]) != EOF)
c++;
printf("%d\n", c);
for (a = 0; a <= c-1; a++) {
ge[shu[a]]++;
}
for (b = 0; b <= 20; b++)
printf("%d ", ge[b]);
return 0;
}

```怎么办

0~20一共有21个数,你数组长度只有20,越界了

修改如下,供参考:

#include <stdio.h>
int main() {
    int ge[21], i, a, b, c = 0, shu[100000]; //修改
    for (i = 0; i < 21; i++) {  //(i = 0; i <= 20; i++)
        ge[i] = 0;
    }
    while (scanf("%d", &shu[c++]) == 1 && (getchar()) != '\n'); //(scanf("%d", &shu[c]) != EOF)
    printf("%d\n", c);
    for (a = 0; a < c; a++) { //(a = 0; a <= c - 1; a++) 
        ge[shu[a]]++;
    }
    for (b = 0; b < 21; b++) //(b = 0; b <= 20; b++)
        printf("%d ", ge[b]);
    return 0;
}