无法使用 setw 操纵器正确对齐

Can't align properly using setw manipulator

我无法对齐程序的输出。 我想保留相同的名称并获得正确的间距。 下面提供了代码。 我也试过使用 left 但它仍然不起作用。

我期望的输出:

我得到的输出:

    //taking name and votes recieved
    for (i = 0; i < 5; i++)
    {
        cout << "Enter last name of candidate " << (i + 1) << ": ";
        cin >> names[i];
        cout << "Enter votes recived by " << names[i] << ": ";
        cin >> votes[i];
    }

    //calculating total votes
    for ( i = 0; i < 5; i++)
    {
        total = total + votes[i];
    }

    //calculating percentage of total votes for each candidate
    for ( i = 0; i < 5; i++)
    {
        percent_of_total[i] = (votes[i] / total) * 100.0;
    }

    //checking winner
    winner = names[0];
    int most = 0;

    for ( i = 0; i < 5; i++)
    {
        if (votes[i] > most)
        {
            most = votes[i];
            winner = names[i];
        }
    }

    cout << fixed << setprecision(2);

    //dislaying

    cout << "Candidte" << setw(20) << "Votes Recieved" << setw(20) << "% of Total Votes";

    for (i = 0; i < 5; i++)
    {
        cout << endl;
        
        cout << names[i] << setw(20) << votes[i] << setw(20) << percent_of_total[i];
    }

    cout << endl;

    cout << "Total" << setw(20) << total;

    cout << endl << "The winner of the Election is " << winner << ".";
    
    return 0;
}

setw 需要在您希望应用固定长度的字段之前调用。这包括名字。如果你想让名字左对齐,你可以使用

std::cout << std::left << std::setw(20) << name /*<< [...]*/;

作为旁注,您应该避免使用 using namespace std;。原因是 std 包含很多名称,您可能会使用其他使用相同名称的库或自己使用它们。 std 相当短,不会使代码过于混乱。一个可行的替代方法是使用

using std::cout;
using std::cin;
using std::endl;
using std::setw;
using std::left;
// etc

您要使用的所有名称。

另一种方法是在要使用 std 命名空间的函数中调用 using namespace std。

#include <iostream>

void f()
{
  using namespace std;
  cout << "f() call" << endl;
}

int main()
{
  // std not being used here by default
  f();
  return 0;
}