【问题标题】:How do I save number of columns in Terminal with C++ to a variable?如何使用 C++ 将终端中的列数保存到变量中?
【发布时间】:2012-12-03 19:46:48
【问题描述】:

我已经搜索了很多,我得到的只是 C 的答案,而不是 C++。我用的是Linux,所以不能用windows.h

我需要做的是获取它正在运行的终端窗口中的列数,然后在中间用 ncurses 打印一些东西。我怎样才能做到这一点?

【问题讨论】:

  • C 答案也适用于 C++。在任何情况下,您都将使用一些很可能是 C 的 API 调用
  • @ArmenTsirunyan 是对的;任何 C 语言也可以在 C++ 中使用。如果有 API 或更多 OO 方法,C++ 特定答案很好,但当你的解决方案在那里时,不要害怕走 C 路线。如果你真的想要一些面向对象的东西,你可以创建一个面向对象的包装器。

标签: c++ terminal ncurses


【解决方案1】:

如果您要使用 ncurses,只需使用库中存在的 use the facility(第 6.3.4 节)即可:

int main(void) {
    int rows, cols;

    initscr();
    getmaxyx(stdscr, rows, cols); // you now have the max for both axis
}

请务必注意,您应该在收到 SIGWINCH 信号后刷新这些值(和屏幕),否则如果有人更改终端程序的高度或宽度,您的窗口会看起来很奇怪。

ncurses 没有 C++ 版本,因为它不是必需的,但许多人更喜欢创建自己的包装器围绕它,以便在应用程序的上下文中更轻松地访问他们想要的功能。 ncurses.h 标头将检查是否正在使用 C++,并进行相应调整:

#ifdef __cplusplus
extern "C" {

要使用它,只需链接它并按程序使用它,或者在您处理程序中终端 I/O 的任何类中使用它。

【讨论】:

    【解决方案2】:

    方法如下:

    int columns=system("tput cols");
    

    您需要#include<stdlib.h>。 然后您可以使用mvprintw(y, x, "your text here") ; 打印您想要的文本wherever

    注意tput lines 给出了行数,如果你也想要的话。

    请注意,我忽略了 I've been searching quite a lot, and all I've had are answers for C, not C++. 行。这是(一种方式)你如何做到这一点,C 或 C++。 您可以参考this 为例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-01
      • 2021-06-11
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 2018-06-15
      • 2011-10-03
      • 2020-05-15
      相关资源
      最近更新 更多