在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,我加了一个. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |