7

我想为 C++ 文本输出流提供类似选项卡的功能。该功能应该允许我说“注意这个位置”,然后允许多次插入操作,最后允许我说“添加足够的填充字符以便结束N字符超过最初记录的位置”。

标准iostream系统似乎没有保持列位置,但我认为我可以使用tellp(). tellp()我的假设是我的输出序列中两点之间的差异将对应于中间字节的数量。

不幸的是,至少在我的 Gnu C++ 环境中,cout并没有保持流位置的虚构。每次cout.tellp()通话returns -1。这是为什么?

4

1 回答 1

5

tellp 在流中返回一个位置,以便您可以寻找它。控制台不允许搜索。此外,即使您将位置解释为“自创建以来写入流的字节数”,该数字也不会用于光标定位 - 屏幕环绕,其宽度通常是不可预测的。你只是不知道你在哪一列,因为行长是可变的。

如果您想在屏幕上合理定位光标,请查看 ANSI 终端规范和随附的转义命令。它们允许光标位置发现和放置。

http://ascii-table.com/ansi-escape-sequences.php

一般来说,屏幕不是流。就此而言,键盘也不是:)

于 2012-06-23T02:58:11.950 回答