You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言数组输出值与预期不符问题求助

C语言球队积分统计代码错误排查

问题重现

编写的C语言代码用于统计球队比赛积分,规则为:平局两队各加1分,获胜队加3分。给定输入后,预期数组a[1]至a[4]的值为4、2、3、1,对应输出应为4 2 3 1,但实际输出为1 2 3 4,首尾值反转。

原代码

#include<stdio.h>
#define MAX 10000

int main(){
    int a[MAX], b[MAX], n;  
    scanf("%d", &n);
    for(int i=0;i<n;i++){
        int c, d, e, f;
        scanf("%d%d%d%d", &c, &d, &e, &f);
        if(f==e){
            a[c]+=1;
            a[d]+=1;
        }
        else{
            if(f>e){
                a[c]+=3;
            }
            else{
                a[d]+=3;
            }
        }
    }   
    for(int i=0;i<4;i++){
        printf("%d ", a[i]);
    }
    return 0;
}

测试输入

4 
1 2 0 0
3 4 1 0
1 3 2 1
2 4 1 1

错误原因分析

  1. 积分判断逻辑完全反转
    根据规则,e是c队的得分,f是d队的得分:

    • 当e > f时,c队获胜应加3分;
    • 当e < f时,d队获胜应加3分。
      但原代码中判断条件写反,仅当f > e(即d队得分更高)时才给c队加3分,完全违背规则,导致积分计算错误。
  2. 输出索引范围错误
    需求是输出a[1]至a[4](对应1-4号球队),但原代码循环是i从0到3,打印的是a[0](未使用的无效索引)至a[3],漏掉了a[4],同时错误输出了随机值的a[0]。

  3. 数组未初始化
    局部数组a在栈上创建,默认值为随机垃圾值,初始积分不为0,会导致统计结果异常。

修正后的代码

#include<stdio.h>
#define MAX 10000

int main(){
    int a[MAX] = {0}; // 初始化数组所有元素为0
    int n;  
    scanf("%d", &n);
    for(int i=0;i<n;i++){
        int c, d, e, f;
        scanf("%d%d%d%d", &c, &d, &e, &f);
        if(e == f){ // 平局判断(顺序不影响)
            a[c] += 1;
            a[d] += 1;
        }
        else{
            if(e > f){ // c队得分更高,c队加3分
                a[c] += 3;
            }
            else{ // d队得分更高,d队加3分
                a[d] += 3;
            }
        }
    }   
    // 输出1-4号球队的积分
    for(int i=1;i<=4;i++){
        printf("%d ", a[i]);
    }
    return 0;
}

验证结果

运行修正后的代码,输入给定测试数据,输出为4 2 3 1,与预期一致。

内容的提问来源于stack exchange,提问作者Hùng Cường

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 13:55:28