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

C語言 scanf 格式字串錯誤導致 -1.#IND00 輸出分析

     編輯:C 語言問答

錯誤代碼

scanf("%d,%d=,%f", &d, &p, &r); // 格式字串包含多餘字元 ",="

問題分析

  1. scanf 依格式字串 **逐字元匹配** 輸入流。
    格式 "%d,%d=,%f" 要求輸入為:數字,數字=,浮點數 (如 10,20=,3.14)。
  2. 若實際輸入 10 20 0.05 (空格分隔),scanf 讀第一個 %d 成功 (d=10),遇逗號 ',' 匹配失敗 → **停止掃描**,p、r **未被賦值** (保留棧上垃圾值)。
  3. 後續運算 p - d*r 為負 → log10(負數) 產生 NaN → 列印 -1.#IND00 (VC++ NaN 表示)。

修正方法

// 方案一:格式字串僅含格式佔位符,以空白分隔
scanf("%d %d %f", &d, &p, &r);

// 方案二:若輸入確實含逗號,精確匹配
scanf("%d,%d,%f", &d, &p, &r); // 輸入: 10,20,0.05

防禦性程式設計

if (scanf("%d %d %f", &d, &p, &r) != 3) {
    fprintf(stderr, "輸入格式錯誤\n");
    return 1;
}
if (p - d * r <= 0) {
    fprintf(stderr, "參數不滿足 p > d*r,對數無意義\n");
    return 1;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved