【发布时间】:2021-07-18 03:56:19
【问题描述】:
我正在尝试创建一个程序,允许我为许多学生(1-25 之间)输入成绩。对于每个学生,我想输入一些成绩(1-10 之间)。对于每个学生,我应该根据我输入的年级数提供他们的名字和姓氏、年龄和平均成绩。这是一个分配,所以我需要在我的程序中有一个名为 Info 的 struct,并且在里面,它有 char 变量 firstName 和 lastName、int变量年龄和float变量平均。
#include <stdio.h>
int gradeVar;
int studVar;
struct Info {
char firstName[20];
char lastName[20];
int age;
int Exam; //This is for something I planned to add later
float Average;
};
int main() {
printf("How many students will you grade (1-25)? ");
scanf("\n%i", &studVar);
if (studVar<1 || studVar>25) {
do{
printf("Invalid\n");
printf("How many students will you grade (1-25)? ");
scanf("\n%i", &studVar);
} while (studVar<1 || studVar>25);
}
printf("How many grades will you read per student (1-10)? ");
scanf("\n%i", &gradeVar);
if(gradeVar<1 || gradeVar>10) {
do{
printf("Invalid\n");
printf("How many grades will you read per student (1-10)? ");
scanf("\n%i", &gradeVar);
} while(gradeVar<1 || gradeVar>10);
}
struct Info Student[studVar];
for(int n=1; n <= studVar; ++n) {
printf("Enter First Name for student %i: ", n);
scanf("\n%s", Student[n].firstName);
printf("Enter Last Name for student %i: ", n);
scanf("\n%s", Student[n].lastName);
//Every thing worked fine until I added the last two lines below//
printf("Enter age for student %i: ", n);
scanf("\n%d", &Student[n].age);
};
return 0;
}
直到我添加最后两行:
printf("Enter age for student %i: ", n);
scanf("\n%d", &Student[n].age);
我的输出中有错误提示 stacked smasing
我不完全确定为什么会发生这种情况,也不知道在哪里修复它以便它按照我想要的方式运行。如果有人能为我澄清这一点,我将不胜感激。
【问题讨论】:
-
您有名字或姓氏超过 19 个字符的学生吗?
-
我们需要足够的信息来复制错误。任何输入都会发生这种情况吗?
-
在循环的最后一次迭代中,
n等于数组的长度,导致越界写入。它应该是for(int n =0; n < studVar; ++n) {。 -
哦,谢谢,我试图从 1 而不是 0 开始数字,以表明我在哪个学生。
-
很高兴您的运行时系统捕获堆栈覆盖! C 的语义允许它在那种情况下做任何事情。阅读有关未定义行为的信息,例如blog.regehr.org/archives/213
标签: c