C 获取Win32控制台中输出的行数?
我正在尝试使用一些业余的C编程来创建自己的函数来清除控制台输出列。我希望在调用函数时获得控制台输出中的行数,以便将光标移动到每行中指定的列,将该列上的空格重写为空白,然后转到下一行。不幸的是,当循环到达最后一行时,我没有办法结束它C 获取Win32控制台中输出的行数?,c,C,我正在尝试使用一些业余的C编程来创建自己的函数来清除控制台输出列。我希望在调用函数时获得控制台输出中的行数,以便将光标移动到每行中指定的列,将该列上的空格重写为空白,然后转到下一行。不幸的是,当循环到达最后一行时,我没有办法结束它 如何获取当前控制台输出中的行数?初始化需要几个步骤,但是提供您要查找的信息的调用是 至少,您需要一个指向控制台的句柄(文件描述符)。你可以用,例如 假设您#包含,您可以通过执行以下操作来实现: HANDLE console = GetStdHandle(STD_OUT
如何获取当前控制台输出中的行数?初始化需要几个步骤,但是提供您要查找的信息的调用是 至少,您需要一个指向控制台的句柄(文件描述符)。你可以用,例如 假设您
#包含,您可以通过执行以下操作来实现:
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO screen;
GetConsoleScreenBufferInfo(console, &screen);
然后访问维度就像键入screen.dwSize.X
(宽度)和screen.dwSize.Y
(高度)一样简单,但这会带来一个问题,X
或Y
维度的大小与所显示的缓冲区的大小不一定相同
因此,在我的电脑上,如果我这样做:
printf("X:%d - Y:%d\n", screen.dwSize.X, screen.dwSize.Y);
当可见Y大小只有25时,它显示X:80-Y:1000
,但我可以滚动1000的长度
我不确定如何获得当前可见输出大小,但这里有一个清除整个屏幕缓冲区的函数:
void clearScreen(void) {
COORD topLeft = { 0, 0 };
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO screen;
DWORD written;
GetConsoleScreenBufferInfo(console, &screen);
FillConsoleOutputCharacterA(
console, ' ', screen.dwSize.X * screen.dwSize.Y, topLeft, &written
);
FillConsoleOutputAttribute(
console, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE,
screen.dwSize.X * screen.dwSize.Y, topLeft, &written
);
SetConsoleCursorPosition(console, topLeft);
}
和一个用于光标控制的简单gotoxy函数:
void gotoxy(int x, int y){
COORD cursorPos = {x,y};
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(console, cursorPos);
}
void gotoxy(int x, int y){
COORD cursorPos = {x,y};
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(console, cursorPos);
}