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

前端之家收集整理的这篇文章主要介绍了在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?有很多提示,所以不需要重复.

@H_404_16@

解决方法

这将打印控制台的大小,而不是缓冲区:
#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,我加了一个.

@H_404_16@ @H_404_16@

猜你在找的C&C++相关文章