如何在控制台窗口中检查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,我加了一个.