我想为C ++文本输出流提供类似标签的功能。该功能应该允许我说“记下这个位置”,然后允许多次插入操作,最后允许我说“添加足够的填充字符,以便在最初指出的位置之后结束N
个字符”。/ p>
标准iostream
系统似乎没有保持列位置,但我原以为我可以使用tellp()
伪造它。我的假设是输出序列中两点tellp()
之间的差异对应于插入字节的数量。
不幸的是,至少在我的Gnu C ++环境中,cout
并不保持流位置的虚构。每次cout.tellp()
来电returns -1
。那是为什么?
答案 0 :(得分:5)
tellp返回流中的位置,以便您可以查找它。控制台不允许搜索。此外,即使您将位置解释为“自创建以来写入流的字节数”,该数字对于光标定位也没有任何用处 - 屏幕环绕,其宽度通常是不可预测的。您只是不知道您所在的列,因为行长度是可变的。
如果您想在屏幕上进行合理的光标定位,请查看随附的ANSI终端规范和转义命令。它们允许光标位置发现和放置。
http://ascii-table.com/ansi-escape-sequences.php
通常,屏幕不是流。对于这个问题,键盘也不是:)