не могу заставить setw выстроиться в очередь

Я не уверен, как это лучше выровнять. Я думал, что если использовать L = name.length(); и вычесть это из setw, получится лучше, но нет. У меня правильно установлены name и ID, но я не могу заставить остальные выстроиться в линию. Это floats кстати.

for (int z=0; z<i ;z++){

  if( EInfo[z].valid >0){

    string name = employee[z].getName();
    int L = name.length();

    payReportObj << fixed << setprecision (2)  <<  endl;

      payReportObj  << setw(3) << employee[z].getID()
                  << setw(36)
                  << employee[z].getName()
                  << setw(30-L) << "$" << setw(4) << EInfo[z].grossPaySE
                  << setw(25) << "$" << setw(4) << EInfo[z].taxSE
                  << setw(15) << "$" << setw(4) << EInfo[z].insuranceSE
                  << setw(25) << "$" << setw(4) << EInfo[z].netPaySE;

Я пытаюсь сделать это более похожим на это... Хочу, чтобы я пытался

Вот что у меня есть... Это то, что у меня есть.


person user1771489    schedule 15.12.2012    source источник
comment
Не могли бы вы привести пример того, как вы хотите, чтобы данные были расположены?   -  person ctor    schedule 15.12.2012
comment
Это шрифт переменной ширины? Серьезно?   -  person melpomene    schedule 15.12.2012
comment
Если это действительно не моноширинный шрифт, вы можете попробовать использовать символы табуляции для выравнивания столбцов.   -  person nimrodm    schedule 15.12.2012


Ответы (1)


Замените setw(30-L) на setw(30). И это:

int L = name.length();

не требуется. Если вы хотите выровнять числа по правому краю, используйте std::right.

Похоже, вы открыли свой выходной файл в nodepad с пропорциональным шрифтом. Вы не увидите столбцы, выровненные пропорциональным шрифтом, даже если они есть. Измените шрифт на фиксированный или введите в терминале type output.txt.

person Leonid Volnitsky    schedule 15.12.2012