web-dev-qa-db-ja.com

iomanipのsetw、setfill、およびleft / rightの使用方法を教えてください。 Setfillは出力を停止していません

出力が次のようになるようにしています:

_size       time1       time2
-------------------------------
10         4           8
100        48          16
1000       2937        922
10000      123011      3902
100000     22407380    830722
_

そして、私はsetw()setfill()、およびleftを使用する必要があることを知っています。しかし、私の試みは私に不正確な出力を与え続けます。これが私のコードの一例です:

_std::cout << "size" << std::setw(20) << "time" << std::setw(20) << "time2\n";
std::cout << std::setfill('-') << std::setw(60) << "-" << std::endl;
run = 10;
for(int i = 0; i < 5; i++) {
    std::cout << run;
    run *= 10;
    std::cout << std::setw(20) << std::left << time1[i];
    std::cout << std::setw(20) << std::left << time2[i] << "\n";
}
_

そしてここに出力があります:

_size    time1    time2
------------------------------------------------------------
103-------------------13------------------
100171-----------------199-----------------
100013183---------------667-----------------
10000670130--------------8205----------------
10000014030798-------------1403079888---------
_

setw()setfill()、およびleftを使用する順序を変更しようとしましたが、今はただ盲目的に飛んでいます。 iomanipチュートリアルも検索しました。私は指示に従います-私の知る限り-まだわかりません。

setfill()の実行を停止するにはどうすればよいですか?左揃えする方法はありますが、setw()を使用して、数値が互いに実行されるのを防ぎますか?

12
user3448821

どうですか:

std::cout << "size" << std::setw(20) << "time" << std::setw(20) << "time2\n";
std::cout << std::setfill('-') << std::setw(60) << "-" << std::endl;
run = 10;
std::cout << std::setfill(' ');  //fill with spaces
for(int i = 0; i < 5; i++) {
    std::cout << std::setw(20) << std::left << run;  // fill the run column
    run *= 10;
    std::cout << std::setw(20) << std::left << time1[i];
    std::cout << std::setw(20) << std::left << time2[i] << "\n";
}
6
sj0h

sj0hの答えは素晴らしいですが、タイトルが揃っていない点が違います。これを修正するには、タイトル行を「left」と「setw」で開始しましたが、「\ n」の代わりに「endl」で終了する必要もありました。

  std::cout << std::left << std::setw(20) << "size" << std::setw(20) << "time" << std::setw(20) << "time2" << std::endl;

  std::cout << std::setfill('-') << std::setw(60) << "-" << std::endl;
  run = 10;
  std::cout << std::setfill(' ');  //fill with spaces
  for(int i = 0; i < 10; i++) {
      std::cout << std::setw(20) << std::left << run;  // fill the run column
      run *= 10;
      std::cout << std::setw(20) << std::left << time1[i];
      std::cout << std::setw(20) << std::left << time2[i] << std::endl;
  }
1