首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 學生管理系統 printf 格式符錯誤導致輸出 0.0

     編輯:程式設計綜合問答

錯誤現象

print() 與 save() 函數中 printf/fprintf 格式字符串包含 %d,但對應參數為 double(如 stu[i].score.yuwen),導致棧參數解析錯位,後續浮點數輸出全為 0.0。

錯誤代碼片段


printf("%s\t%s\t%s\t%d\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",
    stu[i].num, stu[i].name, stu[i].sex,
    stu[i].score.yuwen,   // ❌ 這裡應為 %d 對應 age,但傳了 double
    stu[i].score.math, ...);

參數順序應為:num, name, sex, age, yuwen, math, english, tiyu, sum,格式符對應 %s %s %s %d %.1f %.1f %.1f %.1f %.1f。

修正


void printstudent(int i) {
    printf("%s\t%s\t%s\t%d\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",
        stu[i].num, stu[i].name, stu[i].sex, stu[i].age,
        stu[i].score.yuwen, stu[i].score.math,
        stu[i].score.english, stu[i].score.tiyu, stu[i].score.sum);
}

print() 和 save() 同理修正。此外,循環 for(i=5;i>0;i--) 應為 for(i=0;i<stnum;i++),否則漏打印且越界。

避坑清單

  1. 啟用 -Wformat 警告,編譯期即可發現格式符不匹配。
  2. 結構體嵌套時,按**內存佈局順序**對應參數,不要憑感覺寫格式串。
  3. 調試時先打印單個字段驗證,再組合完整行。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved