輸入一行字串,大寫轉小寫,逆序輸出。
#include
#include
#include
int main() {
char line[100];
printf("輸入一行字串: ");
if (!fgets(line, sizeof(line), stdin)) return 1;
// 移除 fgets 保留的換行符
char *nl = strchr(line, '\n');
if (nl) *nl = '\0';
// 逆序輸出並轉小寫
for (int i = strlen(line) - 1; i >= 0; i--) {
putchar(tolower((unsigned char)line[i]));
}
putchar('\n');
return 0;
}
fgets(buf, sizeof(buf), stdin) (保留換行) 或 getline() (POSIX, 自動擴充)。tolower/toupper 參數為 int,需轉型 (unsigned char) 避免負值 (非 ASCII 字元) 導致未定義行為。
// 原始碼問題
do { scanf("%c", &a[n]); ... } while (a[n-1] != '\n');
// 1. scanf("%c") 讀取空白/換行,極難控制
// 2. a[n-1] 邏輯混亂,n 未正確增長
// 3. 輸出迴圈條件 n>=0 但 n 未初始化
// 4. printf("%c",) 缺少參數