Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 获取Win32控制台中输出的行数?_C - Fatal编程技术网

C 获取Win32控制台中输出的行数?

C 获取Win32控制台中输出的行数?,c,C,我正在尝试使用一些业余的C编程来创建自己的函数来清除控制台输出列。我希望在调用函数时获得控制台输出中的行数,以便将光标移动到每行中指定的列,将该列上的空格重写为空白,然后转到下一行。不幸的是,当循环到达最后一行时,我没有办法结束它 如何获取当前控制台输出中的行数?初始化需要几个步骤,但是提供您要查找的信息的调用是 至少,您需要一个指向控制台的句柄(文件描述符)。你可以用,例如 假设您#包含,您可以通过执行以下操作来实现: HANDLE console = GetStdHandle(STD_OUT

我正在尝试使用一些业余的C编程来创建自己的函数来清除控制台输出列。我希望在调用函数时获得控制台输出中的行数,以便将光标移动到每行中指定的列,将该列上的空格重写为空白,然后转到下一行。不幸的是,当循环到达最后一行时,我没有办法结束它


如何获取当前控制台输出中的行数?

初始化需要几个步骤,但是提供您要查找的信息的调用是

至少,您需要一个指向控制台的句柄(文件描述符)。你可以用,例如

假设您
#包含
,您可以通过执行以下操作来实现:

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);
}