26

出力でフィル値を「-」文字に設定するコード行がありますが、setfill フラグをデフォルトの空白文字にリセットする必要があります。それ、どうやったら出来るの?

cout << setw(14) << "  CHARGE/ROOM" << endl;
cout << setfill('-') << setw(11) << '-' << "  " << setw(15) << '-' << "   " << setw(11) << '-' << endl;

私はこれがうまくいくかもしれないと思った:

cout.unsetf(ios::manipulatorname) // Howerver I dont see a manipulator called setfill

私は間違った道を進んでいますか?

4

5 に答える 5

31

iostream のフラグに RAII スタイルのスコープ ガードを提供するBoost.IO_State_Saversを見てください。

例:

#include <boost/io/ios_state.hpp>

{
  boost::io::ios_all_saver guard(cout); // Saves current flags and format

  cout << setw(14) << "  CHARGE/ROOM" << endl;
  cout << setfill('-') << setw(11) << '-' << "  " << setw(15) << '-' << "   " << setw(11) << '-' << endl;
// dtor of guard here restores flags and formats
}

より特殊なガード (塗りつぶし、幅、精度などのみ) もライブラリにあります。詳細については、ドキュメントを参照してください。

于 2009-10-03T13:45:02.457 に答える
29

copyfmtを使用して、cout の初期フォーマットを保存できます。フォーマットされた出力が終了したら、それを再度使用してデフォルト設定を復元できます ( fill character を含む)。

{
    // save default formatting
    ios init(NULL);
    init.copyfmt(cout);

    // change formatting...
    cout << setfill('-') << setw(11) << '-' << "  ";
    cout << setw(15) << '-' << "   ";
    cout << setw(11) << '-' << endl;

    // restore default formatting
    cout.copyfmt(init);
}
于 2014-09-19T21:47:42.910 に答える
10

関数を使用して、ios::fill()代わりにフィル文字を設定および復元できます。

http://www.cplusplus.com/reference/iostream/ios/fill/

#include <iostream>
using namespace std;

int main () {
  char prev;

  cout.width (10);
  cout << 40 << endl;

  prev = cout.fill ('x');
  cout.width (10);
  cout << 40 << endl;

  cout.fill(prev);

  return 0;
}
于 2009-10-03T12:40:01.133 に答える
3

setfill フラグを必要なものに手動で変更できます。

float number = 4.5;
cout << setfill('-');
cout << setw(11) << number << endl; // --------4.5
cout << setfill(' ');
cout << setw(11) << number << endl; // 4.5
于 2015-07-07T17:13:18.860 に答える