我试图做一个程序,让用户添加,编辑,查看,加载和保存课程,并计算它们的GWA(一般加权平均)。唯一不起作用的功能是加载/阅读课程!阅读和结构的C编写
,所以这是我的结构:
struct studrec{
char crsnum[MAX_CNUM];
char crstle[MAX_CTITLE];
float grdobt;
float crscrd;
};
,这是我的函数:
int loadCourses(struct studrec s[MAX_COURSES], int n){
FILE *fp=fopen("savedinputs.txt","r");
int i;
if(fp != NULL){
fscanf(fp, "%d\n", &n);
for(i=0; i<n; i++){
fscanf(fp, "%s \n", s[i].crsnum);
fscanf(fp, "%s \n", s[i].crstle);
fscanf(fp, "%f \n", &s[i].grdobt);
fscanf(fp, "%f \n", &s[i].crscrd);
}
printf("Loaded!");
fclose(fp);
}
else{
printf("Error reading file");
}
return n;
}
我不知道为什么,但它会导致分段错误。
这就是我所谓的负载课程
main() {
//something working here
do{
ch = dispMenu(ch);
switch(ch){
case 1: cnt = addCourse(crs , cnt);
break;
case 2: editCourse(crs);
break;
case 3: searchCourse(crs);
break;
case 4: dispAllCourses(crs , cnt);
break;
case 5: computeGWA(crs);
break;
case 6: sortCourses(crs , cnt);
break;
case 7: cnt = loadCourses(crs , cnt); //function call
break;
case 8: saveCourses(crs , cnt);
break;
case 0: printf("\n\tBye!\n");
break;
default: printf("\n\tInvalid Input!\n");
}
}while(ch!=0);
}
的输入是正确的(例如MAXCOURSES下)
我感动FCLOSE(FP),但我有说s [i] .crstle是一个STRING WITH SPACES。我如何正确地打电话给他们?
显示更多的代码,即如何调用'loadCourses()'。还要确保'fopen()'成功,否则'fp'是'NULL',这不利于传递给'fscanf()'。 – unwind
这是正确的之前,首先调用的fscanf与调试“NULL” –
运行它的检查,你会看到它崩溃 –