scanf("%c", &a[i])。scanf("%c", &k) 吸收回車後行為改變但仍不正確。scanf("%d", &n) 讀取整數後,**換行符 '\n' 滯留在 stdin 緩衝區**。緊接的 scanf("%c", &a[0]) 直接讀取該 '\n' 作為第一個字符,導致實際字符串向後偏移一位,最後一位讀不到。
scanf("%d", &n);
getchar(); // 吸收單個殘留換行符
// 或更穩健:讀取整行再解析
char line[256];
fgets(line, sizeof(line), stdin);
sscanf(line, "%d", &n);
%d 和 %c,改用 fgets 讀整行,sscanf/strtok 解析。scanf,在每次 %c 前加 getchar() 或用 " %c"(前置空格跳過空白字符)。main 缺省 return 0;,編譯器自動插入;建議顯式寫出以提高可讀性。for (i = 0; i < n; i++) {
scanf(" %c", &a[i]); // 前置空格跳過空白
a[i] = a[i] + 4;
}
徹底理解 stdin 緩衡機制,是 C 語言輸入處理無 Bug 的關鍵。