20

バックスペース制御文字を使用して'\b'、行末の末尾のコンマを消去しようとしています。に他に出力がない場合は動作しますがstdout、 の後に別の出力がある場合は'\b'使い物になりません。次に例を示します。

#include <iostream>

using namespace std;

int main()
{
    int a[] =  { 1, 3, 4, 5, 6, 32, 321, 9};
    for ( int i = 0; i < 8; i++) {
        cout << a[i] << "," ;
    }
    cout << "\b" ;
    //cout << endl;
    return 0;
}

上記のコード ブロックで、表示されているように行がコメント化されている場合、数字 9 の後にカンマがなくても目的の結果が得られます。

私のプログラムでは、コンマをそこに入れたくありませんが、9 の後に終了行が必要です。これを行うにはどうすればよいですか?

4

4 に答える 4

32

コンソールの最後の文字を消去する通常の方法は、シーケンスを使用すること"\b \b"です。これは、カーソルを 1 スペース戻してから、スペースを書き込んで文字を消去し、再びバックスペースを使用して、新しい書き込みが古い位置から開始されるようにします。\b単独ではカーソルを移動するだけであることに注意してください。

もちろん、最初からコンマを出力することは常に回避できます。

if(i > 0) cout << ",";
cout << a[i];
于 2012-10-07T01:18:09.977 に答える
5

または、C+11 のハックが好きなら:

adjacent_difference(a.begin(), a.end(), ostream_iterator<int>(std::cout),
  [](int x, int)->int { return std::cout << ",", x; });
于 2012-10-07T04:53:42.377 に答える