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

C 語言 getchar() 完全指南:緩衝機制、返回值與調試技巧

     編輯:關於C語言

函數原型與基本行為

#include <stdio.h>
int getchar(void);
  • 從標準輸入流(stdin)讀取單個字符
  • 返回值:字符的 ASCII 碼(unsigned char 轉 int),或 EOF (-1) 表示錯誤/文件結束
  • 行緩衝特性:默認終端為行緩衡模式,用戶輸入的字符存入鍵盤緩衝區,直到按下 Enter(換行符也入緩衝),getchar 才開始逐個讀取
  • 回顯:輸入字符自動顯示在屏幕上
  • 緩衝區殘留:若一次輸入多字符,後續 getchar 直接從緩衝區讀取,不再等待按鍵,直到緩衝區耗盡

getchar vs getch 對比

特性getchar()getch()(非標準,conio.h)
等待 Enter是(行緩衝)否(無緩衝,即時)
回顯是否
返回值int(含 EOF)int(無 EOF,出錯 -1)
標準性ISO C 標準Windows/DOS 專用
典型用途標準輸入處理調試暫停、密碼輸入、遊戲按鍵

經典使用模式

1. 逐字符回顯直到換行

#include <stdio.h>
int main(void) {
    int c;
    while ((c = getchar()) != '\n')
        putchar(c);
    return 0;
}

2. 程序結束暫停(調試常用)

int main() {
    // ... 業務邏輯 ...
    printf("Press Enter to exit...");
    getchar();  // 等待用戶按鍵,防止控制台瞬間關閉
    return 0;
}

注意: 若前序輸入留有換行符在緩衝區,此處 getchar() 會直接讀走而不阻塞。更稳健寫法:

while (getchar() != '\n');  // 清空緩衝區
getchar();                    // 真正等待

核心注意事項

  1. 返回類型必須為 int,不可用 char(無法區分 EOF 與 0xFF)
  2. 緩衝區殘留字符會影響後續讀取,必要時手動清空
  3. 非阻塞/單字符讀取需配合終端設置(stty raw、select/poll、ncurses 等)
  4. 錯誤處理:檢查 ferror(stdin) 區分 EOF 與讀取錯誤

進階:配合 EOF 的標準輸入處理模板

int c;
while ((c = getchar()) != EOF) {
    if (c == '\n') {
        // 行結束處理
    } else {
        // 普通字符處理
    }
}
if (ferror(stdin)) {
    perror("Input error");
}

掌握 getchar() 的緩衝行為與返回值語義,是處理控制台輸入、解析文本流、編寫交互式工具的基本功。

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