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

C++ getchar() 用法詳解:緩衝區、換行符與迴圈控制

     編輯:程式設計綜合問答

基本特性

  • 從 `stdin` (標準輸入) 讀取**單一字元** (含換行、空格、控制字元)。
  • **行緩衝**:使用者輸入並按 Enter 後,整行字元才進入緩衝區供 `getchar()` 逐一讀取。
  • 返回 `int` (非 `char`),以容納 `EOF` (-1)。

標準迴圈範本


#include 
int main() {
    int c; // 必須用 int 接收 EOF
    while ((c = getchar()) != EOF) { // Ctrl+D (Linux/Mac) / Ctrl+Z (Windows) 結束
        putchar(c); // 原樣輸出
    }
    return 0;
}

題目:每行整數求和 (空格分隔,換行換行)


#include 
#include 

int main() {
    int c, sum = 0, num = 0, in_num = 0;
    while ((c = getchar()) != EOF) {
        if (isdigit(c)) {
            num = num * 10 + (c - '0');
            in_num = 1;
        } else {
            if (in_num) { sum += num; num = 0; in_num = 0; }
            if (c == '\n') {
                printf("%d\n", sum);
                sum = 0;
            }
            // 空格、Tab 等直接忽略
        }
    }
    // 檔案結尾若無換行,補印最後一行
    if (in_num) { sum += num; printf("%d\n", sum); }
    return 0;
}

關鍵點

  1. 狀態機解析: `in_num` 標記是否正在讀取數字,遇非數字時結束當前數字累加。
  2. 換行符觸發輸出: 遇 `\n` 印出該行總和並歸零。
  3. EOF 處理: 檔案結尾可能無 `\n`,需補印。

常見誤區

  • 用 `char c` 接收 → 無法區分 `EOF` (-1) 與字元 `ÿ` (255)。
  • 以為 `getchar()` 自動跳過空白 → **不會**,空白、換行皆會被讀取並返回。
  • 混淆 `getchar()` (字元) 與 `scanf("%d")` (格式化掃描,自動跳過空白)。

結論:`getchar()` 逐字元讀取,配合狀態機解析格式化輸入。

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