c/c++语言开发共享获取终端窗口的大小(行/列)

有没有可靠的方法来获取当前输出终端窗口的列数/行数?

我想在C / C ++程序中检索这些数字。

我主要是在寻找GNU / Linux解决方案,但也需要Windows解决方案。

    Linux / unix:将ioctl与标准输出文件号STDOUT_FILENOTIOCGWINSZ

     struct winsize size; ioctl(STDOUT_FILENO,TIOCGWINSZ,&size); /* size.ws_row is the number of rows, size.ws_col is the number of columns. */ 

    此外,虽然我在过去5年没有触摸过Windows,但GetConsoleScreenBufferInfo应该可以帮助您获得当前的控制台大小。

    在Windows上,使用以下代码打印控制台窗口的大小(从此处借用):

     #include  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; } 

    在Linux上,使用以下代码(从这里借用):

     #include  #include  #include  int main (int argc, char **argv) { struct winsize w; ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); printf ("lines %dn", w.ws_row); printf ("columns %dn", w.ws_col); return 0; // make sure your main returns int } 

    在使用libtermcap的GNU / Linux上( )创建demo.c:

     #include  #include  #include  #include  static char term_buffer[2048]; void init_terminal_data (void) { char *termtype = getenv ("TERM"); int success; if (termtype == NULL) fprintf (stderr, "Specify a terminal type with `setenv TERM '.n"); success = tgetent (term_buffer, termtype); if (success < 0) fprintf (stderr, "Could not access the termcap data base.n"); if (success == 0) fprintf (stderr, "Terminal type `%s' is not defined.n", termtype); } int main () { init_terminal_data (); printf ("Got: Lines: %d, Columns: %dn", tgetnum ("li"), tgetnum ("co")); return 0; } 

    然后用gcc -o demo.x demo.c -ltermcap编译并运行以给出:

     $ ./demo.x Got: Lines: 24, Columns: 80 

    我怀疑这在Windows上有多大帮助,但我不知道那个平台。

    (部分代码直接从termcap文档中复制。)

    为Windows扩展@herohuyongtao答案。 .srWindow属性给出了控制台窗口大小的答案,即可见的行和列。 这并没有说明实际可用的屏幕缓冲区宽度和高度是多少,如果窗口包含滚动条,则可能更大。 如果是这种情况,请使用.dwSize:

    需要了解更多c/c++开发分享获取终端窗口的大小(行/列),也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

     CONSOLE_SCREEN_BUFFER_INFO sbInfo; GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &sbInfo); int availableColumns = sbInfo.dwSize.X; int availableRows = sbInfo.dwSize.Y; 

      以上就是c/c++开发分享获取终端窗口的大小(行/列)相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/980636.html

      (0)
      上一篇 2021年12月14日
      下一篇 2021年12月14日

      精彩推荐