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

C 語言 scanf 輸入錯誤:數值與字串類型不匹配導致垃圾輸出

     編輯:程式設計綜合問答

問題現象

使用 scanf 輸入「10」與「twenty」兩個資料後,輸出卻出現垃圾數據。

原因分析

  • 若格式字串使用 %d 讀取整數,但使用者輸入非數字字串(如 "twenty"),scanf 會停止讀取並留下無效輸入在緩衝區。
  • 變數可能未被正確賦值,保留記憶體中的舊資料(垃圾值)。
  • scanf 的回傳值表示成功讀取的項目數,若未檢查回傳值,就無法知道讀取是否成功。

建議做法

int a;
char b[20];
if (scanf("%d %19s", &a, b) == 2) {
    printf("讀取成功: %d, %s\n", a, b);
} else {
    printf("輸入格式錯誤\n");
}

或使用 fgets 讀取整行後再用 sscanf 或 atoi 轉換,能更好地處理錯誤輸入。

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