这项家庭作业是:
实施一个模仿ECE 173班级名单的程序。名单上最多有50名学生。
每位学生都有一个姓氏,名字,学生证,编程作业的可能分数(1-5),以及考试的可能分数(1和2)。使用结构和功能来开发程序。
程序应从文件中获取所有输入(例如,名册大小,编程分配数,测试次数和每个学生的信息)。输入所有信息后,用户应能够显示输入的信息,并将屏幕输出写入文件。
注意:您的提交必须包含五个用于测试程序的输入文件。
我完成了与ECE 173班级名单有关的第一部分。但是,我真的在努力完成这项任务的输入/输出部分。这就是我现在所拥有的;它成功构建,但在运行程序时,它会停止。
#include <stdio.h>
struct test{double testgrade;
};
struct hw{double hwgrade;
};
struct student{
char first[30];
char last[30];
int stuID;
struct hw hwamount[5];
struct test testamount[2];
};
int main() {
int rostersize;
int testnumber;
int hwnumber;
FILE *fp;
FILE * fop;
fp = stdin;
fop = stdout;
fp = fopen("eceroster_in.txt", "r");
fop = fopen("eceroster_out.txt", "w");
//fprintf(fp, "How many students are there?\n");
fscanf_s(fp, "%d", &rostersize);
while (rostersize >50){
//printf("Roster cannot exceed 50 students!\n");
fscanf_s(fp, "%d", &rostersize);
}
struct student roster[50];
//fprintf(fp, "How many tests are there?\n");
fscanf_s(fp, "%d", &testnumber);
while (testnumber >2){
//printf("Cannot exceed 2 tests!\n");
fscanf_s(fp, "%d", &testnumber);
}
//fprintf(fp,"How many assignments are there?\n");
fscanf_s(fp, "%d", &hwnumber);
while (hwnumber >5){
//fprintf (fp, "Cannot exceed 5 assignments!\n");
fscanf_s(fp,"%d", &hwnumber);
}
for (int i = 0; i < rostersize; i++){
//fprintf(fp, "Enter student's last name:\n");
fscanf_s(fp, "%s", &(roster[i].last));
//fprintf(fp, "Enter student's first name:\n");
fscanf_s(fp, "%s", &(roster[i].first));
//fprintf(fp, "Enter the student's ID:\n");
fscanf_s(fp, "%i", &(roster[i].stuID));
for (int j = 0; j < testnumber; j++){
//fprintf(fp, "Enter the student grade for test %d\n", j+1);
fscanf_s(fp, "%lf", &(roster[i].testamount[j].testgrade));
}
for (int k = 0; k < hwnumber; k++){
//fprintf(fp, "Enter the student grade for assignment %d\n", k+1);
fscanf_s(fp, "%lf", &(roster[i].hwamount[k].hwgrade));
}
}
//fprintf(fp, "How many times would you like your roster to print?\n");
int rosterAmount;
fscanf_s(fp, "%d", &rosterAmount);
for (int j = 0; j < rosterAmount; j++){
for (int k = 0; k < rostersize; k++){
fprintf(fop, "Name: %s %s \n", &(roster[k].first, roster[k].last));
fprintf(fop, "Student ID: %d\n", &(roster[k].stuID));
for (int mm = 0; mm < testnumber; mm++){
fprintf(fop, "Test %d: %.1f\n", &
(mm+1,roster[k].testamount[mm].testgrade));
}
for (int m = 0; m < hwnumber; m++){
fprintf(fop, "Assignment %d: %.1f\n", & (m+1,roster[k].hwamount[m].hwgrade));
}
fprintf(fop, "_______________________________\n");
}
}
fclose (fp);
fclose (fop);
return 0;
}
它构建成功,但它有一个错误&#34; Debug Assertion失败!在尝试调试时
答案 0 :(得分:1)
我错过了发表评论的要点,所以使用答案。你必须:
该计划应该采取所有输入(例如,名册大小,数量 编程分配,测试次数和每个的信息 来自档案的学生。
这意味着:没有必要在命令行上询问学生数量,测试。首先创建一些易于解析的文本数据文件,其中包含有关学生的信息,断言num_of_students&lt; 51,学生姓名或至少他们的身份证是唯一的,等等。 除了良好的输入文件,你还应该创建几个搞砸的文件。因此,您可以显示您的程序如何处理错误的输入。
然后考虑一下这些数据的基本用例:
没有人会检查这个程序是否会在命令行上手动输入51个名称,ID,加上说100个等级,并且如在赋值的引用部分中所述,它既不需要也不是预期的
希望有所帮助