openjudge 1.5奥运奖牌的计数问题,C语言数组基础语法

问题:控制台不能实现输入,运行完直接是空格
题目:
2008年北京奥运会,A国的运动员参与了n天的决赛项目(1≤n≤17)。现在要统计一下A国所获得的金、银、铜牌数目及总奖牌数。

输入
输入n+1行,第1行是A国参与决赛项目的天数n,其后n行,每一行是该国某一天获得的金、银、铜牌数目,以一个空格分开。
输出
输出1行,包括4个整数,为A国所获得的金、银、铜牌总数及总奖牌数,以一个空格分开。
样例输入
3
1 0 3
3 1 0
0 3 0
样例输出
4 4 3 11


#include<stdio.h>
int main()
{
    int i,y,n,a[n][3],x1=0,x2=0,x3=0,all=0;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        for(y=0;y<3;y++)
        {
            scanf("%d",&a[i][y]);
        }
    }
    for(i=0;i<n;i++)
    {
        x1+=a[i][0];
    }
    for(i=0;i<n;i++)
    {
        x1+=a[i][1];
    }
    for(i=0;i<n;i++)
    {
        x1+=a[i][2];
    }
    all=x1+x2+x3;
    printf("%d %d %d %d",x1,x2,x3,all);
    return 0;
}

代码看不出哪里错了,但是编译后控制台直接不能输入

img

数组的大小应是常数,修改如下,改动处见注释,供参考:

#include<stdio.h>
#define N 18
int main()
{
    int i,y,n,a[N][3],x1=0,x2=0,x3=0,all=0; // 修改 a[n][3]
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        for(y=0;y<3;y++)
        {
            scanf("%d",&a[i][y]);
        }
    }
    for(i=0;i<n;i++) 
    {
        x1+=a[i][0];  // 修改
        x2+=a[i][1];
        x3+=a[i][2];
    }
    //for(i=0;i<n;i++) 修改
    //{
    //    x1+=a[i][1];
    //}
    //for(i=0;i<n;i++)
    //{
    //    x1+=a[i][2];
    //}
    all=x1+x2+x3;
    printf("%d %d %d %d",x1,x2,x3,all);
    return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^