輸入一字符,判斷是否字母。非字母提示錯誤。字母則輸出下一字符(c→d,Z→A),大小寫不變。
#include
int main() {
char ch;
printf("請輸入一個字符: ");
scanf(" %c", &ch); // 空格跳過換行符
if (ch >= 'A' && ch <= 'Z') { // 大寫字母
ch = (ch - 'A' + 1) % 26 + 'A'; // 環形移位
printf("下一字符: %c\n", ch);
} else if (ch >= 'a' && ch <= 'z') { // 小寫字母
ch = (ch - 'a' + 1) % 26 + 'a';
printf("下一字符: %c\n", ch);
} else {
printf("輸入的字符不是字母\n");
}
return 0;
}
ch = (ch - base + offset) % 26 + base;
// ch - base : 字符在字母表中的偏移量 (0-25)
// + offset : 移位量 (題目為1)
// % 26 : 模運算實現環形循環 (Z+1→A)
// + base : 偏移量轉回ASCII碼
scanf("%c")讀到殘留換行符:用scanf(" %c")(格式串前加空格)或getchar()清理緩衝區。switch處理字符範圍:switch只能匹配離散常量,不能匹配區間,需用if-else。ch++:'Z'+1 = '['(ASCII 91),非'A'。'A'/'a'。char shiftChar(char ch, int offset) {
if (ch >= 'A' && ch <= 'Z')
return (char)((ch - 'A' + offset % 26 + 26) % 26 + 'A');
if (ch >= 'a' && ch <= 'z')
return (char)((ch - 'a' + offset % 26 + 26) % 26 + 'a');
return ch; // 非字母原樣返回
}
// 測試
shiftChar('Z', 1) → 'A'
shiftChar('a', -1) → 'z'
shiftChar('m', 13) → 'z' (ROT13)