Как мне использовать setwill, setfill и left / right в iomanip? 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() чтобы номера не сталкивались друг с другом?

10

Решение

Как насчет:

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 великолепен, за исключением того, что названия не совсем совпадают. Чтобы исправить это, я начал строку заголовка с «left» и «setw», мне также пришлось заканчивать на «endl» вместо «\ n».

  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

По вопросам рекламы [email protected]