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

C語言處理「輸入到文件結束」:EOF 與 scanf 返回值正確用法

     編輯:關於C語言

問題場景

ACM/OJ 題目常見描述:「輸入包含多行數據,請處理到文件結束」。無明確終止標記(如#、雙回車)。

核心機制

  • 控制台輸入以 Ctrl+Z (Windows) 或 Ctrl+D (Linux/Mac) 發送 EOF 信號。
  • scanf 讀取失敗(遇到 EOF)返回 EOF(通常為 -1)。
  • 正常讀取返回成功賦值的項數。

標準循環模式


int a, b;
while (scanf("%d %d", &a, &b) != EOF) {
    // 處理 a, b
    printf("%d\n", a + b);
}

或針對固定項數:


while (scanf("%d %d", &a, &b) == 2) { ... }

常見誤區

  • while (scanf(...)):讀取 0 項(如非數字輸入)返回 0,循環退出,但非 EOF 導致後續無限循環。
  • 用clock()控制時間:OJ 編譯環境無time.h或行為不可預期。
  • 誤以為文件讀取同理:文件fscanf(fp, ..., &a, &b) != EOF同樣適用。

完整示例:A+B Problem 多組輸入


#include 
int main() {
    int a, b;
    while (scanf("%d %d", &a, &b) == 2) {
        printf("%d\n", a + b);
    }
    return 0;
}

輸入:
1 2
3 4
Ctrl+Z

輸出:
3
7

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