程式碼在 while 迴圈內再次呼叫 getchar(),導致每次迴圈**讀取兩個字元** (一次在迴圈條件,一次在迴圈體),輸出字元數比輸入多一倍。
c = getchar();
while (c != '\n') {
c = trans(c);
printf("%d", c);
getchar(); // 多餘:吞掉下一個字元
}
int c;
while ((c = getchar()) != '\n' && c != EOF) {
c = trans(c);
putchar(c); // 或 printf("%c", c);
}
putchar('\n');
getchar() 每次呼叫**消耗一個字元**,不可重複呼叫。(c = getchar()) 同時完成讀取與判斷。putchar(c) 比 printf("%d", c) 更語意清晰 (輸出字元而非整數)。EOF 以應對重導向輸入檔案結束。理解 getchar 會移動輸入流指標,是避免此類「多讀/少讀」錯誤的關鍵。