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。