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

C 語言 getchar() 迴圈處理換行符:跳過換行符的正確寫法

     編輯:程式設計綜合問答

原始程式碼問題

while ((ch = getchar()) != '#') {
    if (ch == '\n') continue; // 只是跳過本次迴圈,換行符已被消費
    ...
}

「跳不過回車」通常指:輸入 a\n 時,第一次讀到 'a',第二次讀到 '\n' 進入 continue,第三次等待新輸入。這是正常行為,非 Bug。

需求釐清

  • 若要忽略所有換行符,直接 continue 即可(如原碼)。
  • 若要將換行符視為結束條件,改為 if (ch == '\n') break;。
  • 若要一次讀取整行,改用 fgets(buf, sizeof(buf), stdin)。

修正後完整程式碼(忽略換行符版)

#include <stdio.h>

int main(void) {
    int ch; // 用 int 接收 EOF
    int change = 0;
    printf("請輸入文字(以 # 結束):\n");
    while ((ch = getchar()) != '#' && ch != EOF) {
        if (ch == '\n') continue; // 忽略換行
        if (ch == '.') {
            putchar('!');
            change++;
        } else if (ch == '!') {
            printf("!!");
            change++;
        } else {
            putchar(ch);
        }
    }
    printf("\n共替換 %d 次。\n", change);
    return 0;
}

關鍵細節

  • ch 宣告為 int 以正確判斷 EOF(通常為 -1)。
  • getchar() 會讀取緩衝區中每一個字元,包含換行符。
  • 若輸入 abc\n,迴圈執行 4 次:'a'、'b'、'c'、'\n'(被 continue 跳過輸出)。

總結

getchar() 逐字元讀取,換行符是合法字元會被讀到。若不想處理換行符,continue 跳過即可;若需按行處理,請改用 fgets。

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