加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 05:43:05 所属栏目:百科 来源:网络整理
导读:如何在控制台窗口中检查ymax和xmax,在 Windows下使用普通c? 有这段代码为linux: #include stdio.h#include sys/ioctl.hint main (void){ struct winsize max; ioctl(0,TIOCGWINSZ,max); printf ("lines %dn",max.ws_row); printf ("columns %dn",max.ws_
如何在控制台窗口中检查ymax和xmax,在 Windows下使用普通c?

有这段代码为linux:

#include <stdio.h>
#include <sys/ioctl.h>
int main (void)
{
    struct winsize max;
    ioctl(0,TIOCGWINSZ,&max);
    printf ("lines %dn",max.ws_row);
    printf ("columns %dn",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: %dn",columns);
    printf("rows: %dn",rows);
    return 0;
}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读