为什么cout.tellp总是返回-1?

Joh*_*tes 6 c++ iostream cout

我想为C++文本输出流提供类似标签的功能.该功能应该允许我说"记下这个位置",然后允许多次插入操作,最后允许我说"添加足够的填充字符,以便最终N字符超过最初指出的位置".

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

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

Sev*_*yev 5

tellp返回流中的位置,以便您可以查找它.控制台不允许搜索.此外,即使您将位置解释为"自创建以来写入流的字节数",该数字对光标定位也没有任何用处 - 屏幕环绕,其宽度通常是不可预测的.您只是不知道您所在的列,因为行长度是可变的.

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

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

通常,屏幕不是流.也不是键盘,就此而言:)