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

C語言學生信息統計:printf 格式字符串缺少佔位符導致輸入提示異常

     編輯:程式設計綜合問答

C 語言初學者常在 printf 格式字符串中忘記佔位符,導致變量不被打印,甚至影響後續輸入。本文通過一個學生成績統計程序,指出並修正這個經典錯誤。

錯誤代碼


printf("\t請輸入第%d學生的數據,i+1");  // 錯誤:逗號在雙引號內,非格式化輸出

現象

  • 屏幕輸出字面文本:請輸入第%d學生的數據,i+1
  • 變量 i+1 未被計算顯示
  • 後續 scanf 正常工作,但用戶體驗差

正確寫法


printf("\t請輸入第%d學生的數據", i+1);  // 正確:佔位符在引號內,變量在引號外

完整程序結構說明

程序功能:輸入 5 名學生的學號、姓名、3 門課成績 → 自動計算平均分 → 格式化輸出。

關鍵數據結構


struct STUDENT {
    char id[10];
    char name[8];
    int score[3];
    double ave;
} stu[5];

輸入循環


for (i = 0; i < num; i++) {
    printf("\t請輸入第%d學生的數據", i+1);  // 修正點
    printf("\t學號:"); scanf("%s", stu[i].id);
    printf("\t姓名:"); scanf("%s", stu[i].name);
    int Tave = 0;
    for (j = 0; j < 3; j++) {
        printf("\t第%d門課的成績:", j+1);
        scanf("%d", &stu[i].score[j]);
        Tave += stu[i].score[j];
    }
    stu[i].ave = (double)Tave / 3.0;
}

輸出格式化


printf("\n\t學號\t姓名\t成績1\t成績2\t成績3\t平均分\n");
for (i = 0; i < num; i++) {
    printf("\t%s\t%s", stu[i].id, stu[i].name);
    for (j = 0; j < 3; j++) printf("\t%d", stu[i].score[j]);
    printf("\t%.2f\n", stu[i].ave);  // 建議保留兩位小數
}

其他改進建議

  • 增加輸入驗證:檢查 scanf 返回值,防止非數字輸入導致死循環
  • 使用 fgets 替代 scanf("%s") 讀取姓名,支持包含空格的名字
  • 定義常量 #define STUDENT_NUM 5 避免魔術數字
  • 主函數返回 int:int main() { ... return 0; }

總結

printf 格式字符串與參數分離是 C 語言基礎語法,務必牢記:「佔位符在引號內,變量在引號外,用逗號分隔」。開啟編譯器警告(-Wall -Wformat)可自動檢測此類錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved