#include
int main() {
int c;
// 版本 1:while((c=getchar())!='\n') putchar(c); // 只能輸入輸出一次
// 版本 2:while((c=getchar())!='\0') putchar(c); // 可無限輸入
// 版本 3:while((c=getchar())!=EOF) putchar(c); // 無法輸出
}
| 符號 | 數值 (ASCII) | 含義 | 鍵盤輸入方式 | 適用場景 |
|---|---|---|---|---|
'\n' | 10 (0x0A) | **換行符** (Newline / Line Feed) | 按 **Enter 鍵** | 逐行讀取、按行處理 |
'\0' | 0 (0x00) | **空字元** (Null Character),C 字串結束標記 | **無法直接從鍵盤輸入** (需 Ctrl+@ 或 Ctrl+Space,終端通常不傳遞) | 字串結束判斷、記憶體初始化 |
EOF | -1 (通常) | **檔案結束/輸入結束** 宏 (End Of File) | Windows: **Ctrl+Z** 然後 Enter Linux/Mac: **Ctrl+D** | 檔案讀取、標準輸入流結束判斷 |
// 讀取整個輸入流直到 EOF (標準範式)
int c;
while ((c = getchar()) != EOF) {
putchar(c);
}
// 逐行讀取 (配合 fgets 更安全)
char line[1024];
while (fgets(line, sizeof(line), stdin)) {
printf("%s", line);
}
原代碼 `while(c=getchar())!='\n'` 缺少外層括號,實際解析為 `while( (c=getchar()) != '\n' )` 才正確。C 語言 `!=` 優先級高於 `=`,**務必加括號**確保先賦值再比較。
理解三者語義與鍵盤交互差異,是掌握 C 標準輸入處理的基礎。