我試圖做一個程序,讓用戶添加,編輯,查看,加載和保存課程,並計算它們的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」 –
運行它的檢查,你會看到它崩潰 –