我一直在寻找一种从我的C程序中获取终端宽度的方法.我一直想出的是:
#include <sys/ioctl.h>
#include <stdio.h>
int main (void)
{
struct ttysize ts;
ioctl(0, TIOCGSIZE, &ts);
printf ("lines %d\n", ts.ts_lines);
printf ("columns %d\n", ts.ts_cols);
}
Run Code Online (Sandbox Code Playgroud)
但每次我尝试我得到
austin@:~$ gcc test.c -o test
test.c: In function ‘main’:
test.c:6: error: storage size of ‘ts’ isn’t known
test.c:7: error: ‘TIOCGSIZE’ undeclared (first use in this function)
test.c:7: error: (Each undeclared identifier is reported only once
test.c:7: error: for each function it appears in.)
Run Code Online (Sandbox Code Playgroud)
这是最好的方法吗,还是有更好的方法?如果不是,我怎么能让它工作?
编辑:固定代码是
#include <sys/ioctl.h>
#include <stdio.h>
int main (void)
{
struct winsize …Run Code Online (Sandbox Code Playgroud) 有没有可靠的方法来获取当前输出终端窗口的列数/行数?
我想在C/C++程序中检索这些数字.
我主要是在寻找GNU/Linux解决方案,但也需要Windows解决方案.
我正在使用Boost Program Options来解析命令行参数(我不想错过它,因为它工作得很好).但是,我有一个问题:Boost程序选项提供了为每个选项分配描述的可能性.然后Boost提供了可能性
cout << program_options_description << endl
很好地显示帮助解释选项.然而,似乎是这些错误消息被调整到终端宽度为80的情况(我从这样的事实得出结论:对于80的宽度,线断开很好地设置).
如果我当前的终端有另一个宽度(特别是一个少于80列的宽度),由于终端自动换行,显示的帮助看起来非常不自然.
那么:Boost是否有可能自动将选项描述调整为当前终端宽度?
我正在尝试创建一个图表,我需要知道用户运行代码的窗口的大小。我正在尝试缩放数据,以便数据仅显示在窗口的大小上,而无需换行或滚动. 我在 Windows 上,但我想使用类似于 Linux 的东西
int lines = atoi(getenv("LINES") ;
int cols = atoi(getenv("COLUMNS") ;
Run Code Online (Sandbox Code Playgroud)
所以我可以缩放数字并显示这样的图表
320 a ============================================================
160 b ==============================
80 c ===============
40 d =======
20 e ===
10 f =
5 g
2 h
1 i
2 j
17 k ===
41 l =======
67 m ============
97 n ==================
127 o ========================
157 p =============================
191 q ====================================
227 r ===========================================
257 s ================================================
283 t =====================================================
331 u ==============================================================
367 v =====================================================================
373 …Run Code Online (Sandbox Code Playgroud) 我想知道:是否可以在标准输出中获得一条线的宽度?没有std::cout.width()或std::setw()宽度,但操作系统之前字符的实际最大数量将换行?
编辑:只是为了通知,我目前正在使用Windows XP,虽然我真的更喜欢便携式方式来做这个(其他一切都是便携式的).