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

C scanf 格式字串 "%d\n" vs "%d" 差異與 EOF 判斷詳解

     編輯:程式設計綜合問答

while (scanf("%d\n", &a) != EOF && n) 中的 \n 與 while (scanf("%d", &a) != EOF && n) 差異:

scanf 回傳值與 EOF

  • scanf 成功讀取並指派 n 個項目時,回傳 n。
  • 遇到檔案結尾 (EOF) 且未讀取任何資料,回傳 EOF (通常為 -1)。
  • 因此 != EOF 可作為「還有資料可讀」的判斷條件。

格式字串中的空白字元

  • %d 本身會**自動跳過前導空白** (空格、換行、Tab)。
  • 額外加 \n 會強制 **「讀取並丟棄一個換行符」**;若輸入流下一個字元非換行,scanf 會卡住等待。
  • 單純 scanf("%d") 較安全,%d\n 易造成「明明有資料卻不繼續讀」的假象。

最佳實踐

while (scanf("%d", &a) == 1 && n) { /* 處理 a */ }
  • 直接檢查回傳值 == 1 (成功讀一個 int),比 != EOF 更精確。
  • 避免在格式字串加入額外 \n、 等空白字元,除非你確定要「吃掉特定分隔符」。

理解 scanf 空白處理機制,能避免 90% 的輸入迴圈卡死問題。

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