#include <stdio.h>
#include <ctype.h>
int main() {
int ch; // 必須用 int 接收 EOF
printf("輸入文字 (Ctrl+Z/EOF 結束):\n");
while ((ch = getchar()) != EOF) {
if (islower(ch)) putchar(toupper(ch));
else if (isupper(ch)) putchar(tolower(ch));
else if (isdigit(ch)) { /* 忽略數字 */ }
else putchar(ch); // 保留標點、空白等
}
return 0;
}
int:getchar() 返回 int,範圍 0~255 與 EOF (通常 -1)。用 char 會導致 EOF 被截斷誤判。ctype.h 函數:islower/isupper/isdigit/toupper/tolower 支援地區設定,比手動比較 'a'..'z' 更健壯。Ctrl+Z 後按 Enter;Linux/macOS Ctrl+D。原始碼用 char a; scanf_s("%c",&a); 先讀一字元,再進 getchar 迴圈會漏掉第一字元;且 a+32 轉換僅限 ASCII。以上版本修正所有問題。