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

C 語言輸入整數序列:以 EOF 而非特定數值作為結束標志

     編輯:程式設計疑難解答

核心問題

若用 -1 作結束標志,則無法輸入 -1 作為有效數據。需一種「無特殊數值、純靠輸入流結束」的方式。

標準模式

int x, a[MAX], i = 0;
while (scanf("%d", &x) == 1) {   // 返回成功匹配的賦值數
    a[i++] = x;
}
// 輸入 Ctrl+D (Linux/Mac) 或 Ctrl+Z (Windows) 觸發 EOF,循環結束

原理解析

  • scanf 返回值:成功匹配並賦值的參數個數;遇到 EOF 返回 EOF(通常為 -1);匹配失敗返回 0。
  • while (scanf("%d", &x) == 1) 同時實現「讀取」與「判斷輸入是否為有效整數」。

進階:帶錯誤恢復

while (1) {
    int ret = scanf("%d", &x);
    if (ret == EOF) break;      // 正常結束
    if (ret == 0) {             // 非數字輸入
        scanf("%*s");           // 吞掉非法 token
        printf("忽略非法輸入\n");
        continue;
    }
    a[i++] = x;
}

採用 scanf 返回值 == 1 作為循環條件,配合 EOF 終止,即可實現「任意整數皆可輸入、無特殊標志」的健壯讀取邏輯。

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