打印 10×10 方陣(中文方塊字符 □),gotoxy(9,7) 打印 * 顯示位置偏移:列數約為預期一半,行數截斷。
中文字符在控制台佔據 2 個字符寬度(雙字節字符),但 COORD.X 以字符單元格為單位。打印 □ 時光標實際移動 2 列,導致實際光標位置與邏輯座標脫節。
[], #, * 等 ASCII 字符繪製方陣。COORD pos = { x * 2, y };(僅適用於全中文輸出場景)。printf("\033[%d;%dH", y+1, x+1);,更精確。#include <windows.h>
#include <stdio.h>
void gotoxy(int x, int y) {
COORD pos = { x * 2, y }; // 中文字符寬度 2
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
}
int main() {
int a = 10;
for (int i = 0; i < a; i++) {
for (int j = 0; j < a; j++) printf("□");
printf("\n");
}
gotoxy(9, 7); // 第 10 列(索引9) 第 8 行(索引7)
printf("中"); // 中文也佔 2 列,對齊
getchar();
return 0;
}
WriteConsoleOutputCharacter 直接寫入字符屬性,或改用圖形庫 (EasyX, SDL, Qt)。ENABLE_VIRTUAL_TERMINAL_PROCESSING,可用 ANSI 序列統一控制。