我是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 吗?。
为了回答您的主要问题,您提供的代码会将输入的第一成绩放在第一个学生分数中,将第二成绩输入到第二个学生分数中,最后输入的成绩将导致未定义的行为。
要纠正此问题,您可以使
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;
}