7

C++ テキスト出力ストリームにタブのような機能を提供したいと考えています。この機能により、「この位置に注意してください」と言うことができ、次に複数の挿入操作が可能になり、最後に「N最初に記録された位置を超えて文字が終了するように十分な文字を追加する」と言うことができるようになります。

標準iostreamシステムは列の位置を維持していないようですが、 を使用して偽造できると考えていましたtellp()tellp()私の仮定では、出力シーケンスの 2 つのポイントの違いは、介在するバイト数に対応するというものでした。

残念ながら、少なくとも私の 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 に答える