繁体   English   中英

为什么 C 数组的第一个值和最后一个值无意中颠倒了?

[英]Why is first value of an C array and last value reversed without intention?

这是我的代码

#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

共有4场比赛,每场比赛有2支球队。 c 和 d 是输入变量,可以在 for 循环的每个输入语句中更改,它们帮助程序识别如果匹配的 c 和 d 是平局(for 循环),如果 c 是哪支球队加 1 分或 d 获胜,得 3 分,输者得 0 分。 要知道 c 或 d 是否获胜,e 和 f 是游戏分数,也可以在 for 循环的每个输入语句中更改。 例如:

  • 有 4 个游戏(给定输入):
  • 第一场比赛以 1 队和 2 队的 0-0 结束(c 和 d 现在是 1 和 2,e 和 f 是 0 和 0),逻辑上 a[1] 和 a[2] 的值是 1 和 1因为他们打结。
  • 分别与其他游戏。 总的来说,a[1]=4,a[2]=2,a[3]=3,a[4]=1。 那么预期的数组 output 必须是:4 2 3 1 但不知何故,我的 prgoram 颠倒了第一个和最后一个值,即 1 2 3 4。
  1. 检查scanf()的返回值,否则您可能正在对未初始化的值进行操作。
  2. 初始化数组a
  3. 好像有逻辑错误。 如果e < f那么我们想给a[d]奖励积分。
  4. arrays 的第一个索引是 0,但您的团队在 1 和 4 之间,因此 output 循环是错误的。 cd是真正的标签,所以也许写一个 function 来提取标签数组并迭代这些标签。
  5. (不固定)考虑使用“团队,分数”格式,而不是 4 个数字的简单列表。
  6. 不使用数组b
  7. (不固定)非描述性变量acdef使您的代码难以阅读。 对于最后 4 个homeguesthome_scoreguest_score呢?
  8. (不固定)你应该检查 c 和 d >= 0 和 < MAX,否则你会发生缓冲区溢出。 考虑使用无符号值而不是(有符号)int。
#include <stdio.h>
#define MAX 10000

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

和示例 session:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM