为什么在for循环(结构体)中输入数据时不会覆盖数据?

问题描述 投票:0回答:1

我是c语言的初学者,我一直在用C语言编写一个程序,其中使用代表学生的结构,并且结构变量包含学生的分数。我的目标是为 2 个学生每人 3 个科目输入分数。

#include <stdio.h>

// Defining a structure for student details
struct Student {
    int mark;
};

int main() {
    struct Student st[2];

    // Input details for 2 student marks
    for (int i = 0; i < 2; ++i) {
        for (int j = 0; j < 3; j++) {
            printf("Marks: ");
            scanf("%f", &st[j].mark);
        }
    }

    for (int i = 0; i < 2; ++i) {
        for (int j = 0; j < 3; j++) {
            printf("Marks: ", st[j].marks);
        }
    }

    return 0;
}

但是在写的时候遇到了困惑,因为我们要求 2 名学生 3 门科目,这意味着学生的分数总共应该跑 6 次。不会覆盖数据吗?喜欢

Marks: 5 Marks: 7 Marks: 8

这里,它不会覆盖变量的最后一个数据吗?在这种情况下,尽管用户输入 5 作为第一个标记,但应该是 8 吗?。

arrays c for-loop input structure
1个回答
0
投票

为了回答您的主要问题,您提供的代码会将输入的第一成绩放在第一个学生分数中,将第二成绩输入到第二个学生分数中,最后输入的成绩将导致未定义的行为

要纠正此问题,您可以使

Student
结构具有列表属性,并且由于您输入的是浮点数,因此它应该是浮点数列表。然后,您还需要更正第一个 for 循环中使用的索引,因为如上所述,它们不会执行预期的行为。

这样的东西应该有效:

#include <stdio.h>
#define NUM_SUBJECTS 3
// Defining a structure for student details
struct Student {
    int marks[NUM_];
};

int main() {
    struct Student st[2];

    // Input details for 2 student marks
    for (int i = 0; i < 2; ++i) {
        for (int j = 0; j < 3; j++) {
            printf("Marks: ");
            scanf("%f", &st[j].mark);
        }
    }

    for (int i = 0; i < 2; ++i) {
        printf("Marks for student %d:\n", i + 1);
        for (int j = 0; j < NUM_SUBJECTS; j++) {
            printf("Subject %d: %f\n", j + 1, st[i].marks[j]);
        }
    }

    return 0;
}


© www.soinside.com 2019 - 2024. All rights reserved.