程式碼:
printf("\t#\n"); // 第1行:跳格印 # 換行
printf("###\n"); // 第2行:印 ### 換行
printf("\t\b\b#####\n"); // 第3行:跳格、退兩格、印 #####
輸出結果中 ##### 出現在**第二行末尾**,而非第三行開頭。
\t:移動到下一個製表位(通常每 8 字元)。假設起始欄 0,跳到欄 8。\b:游標左移一格。第一個 \b 從欄 8 移到欄 7;第二個 \b 從欄 7 移到欄 6。\b 在第 0 欄時視為「移至上一行末尾」,則第二個 \b 會將游標帶到**第二行末尾**。##### 從該位置開始印出,故出現在第二行右側。\b 不保證在行首換行,行為由實作定義。cmd.exe:\b 在行首不動作,##### 會印在第三行第 6 欄。\b 在行首會捲動到上一行末尾,導致現象。printf("12345678\t\b\bABC\n"); // 觀察 ABC 位置
結論:不要依賴 \b 跨行操作**,輸出排版請使用 \r (回車)、\n、%*s 寬度格式化或完整重繪庫(ncurses),確保跨平台一致性。