在c窗口中获取终端大小?

如何在控制台窗口中检查ymax和xmax,在 Windows下使用普通c?

有这段代码为linux:

#include <stdio.h>
#include <sys/ioctl.h>
int main (void)
{
    struct winsize max;
    ioctl(0,TIocgWINSZ,&max);
    printf ("lines %d\n",max.ws_row);
    printf ("columns %d\n",max.ws_col);
}

现在我想知道如何在Windows中做同样的操作.我尝试过winioctl.h但是它并没有定义struct winsize,也没有定义任何类似的名字.

任何提示?谢谢.

PS.在linux中,您也可以使用getenv(“LInes”);. Windows下有类似的变量吗?

PPS.此外,总是有ncurses.h,我认为这两个系统都工作,但是我正在避免它,因为我与其他库冲突.

购买力平价.这个问题在这里Getting terminal width in C?有很多提示,所以不需要重复.

解决方法

这将打印控制台的大小,而不是缓冲区:
#include <windows.h>

int main(int argc,char *argv[]) {
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    int columns,rows;

    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE),&csbi);
    columns = csbi.srWindow.Right - csbi.srWindow.Left + 1;
    rows = csbi.srWindow.Bottom - csbi.srWindow.Top + 1;

    printf("columns: %d\n",columns);
    printf("rows: %d\n",rows);
    return 0;
}

代码的工作原理是因为srWindow“包含显示窗口左上角和右下角的控制台屏幕缓冲区坐标”,SMALL_RECT结构根据MSDN“指定屏幕缓冲区字符单元格的行和列”.我减去平行边以获得控制台窗口的大小.由于我比实际价值低1,我加了一个.

相关文章

对象的传值与返回说起函数,就不免要谈谈函数的参数和返回值...
从实现装饰者模式中思考C++指针和引用的选择最近在看...
关于vtordisp知多少?我相信不少人看到这篇文章,多半是来自...
那些陌生的C++关键字学过程序语言的人相信对关键字并...
命令行下的树形打印最近在处理代码分析问题时,需要将代码的...
虚函数与虚继承寻踪封装、继承、多态是面向对象语言的三大特...