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
错误原因分析
积分判断逻辑完全反转
根据规则,e是c队的得分,f是d队的得分:- 当
e > f时,c队获胜应加3分; - 当
e < f时,d队获胜应加3分。
但原代码中判断条件写反,仅当f > e(即d队得分更高)时才给c队加3分,完全违背规则,导致积分计算错误。
- 当
输出索引范围错误
需求是输出a[1]至a[4](对应1-4号球队),但原代码循环是i从0到3,打印的是a[0](未使用的无效索引)至a[3],漏掉了a[4],同时错误输出了随机值的a[0]。数组未初始化
局部数组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
相关产品推荐
相关产品推荐

