0

OK、このプログラムでは、ユーザー入力に基づいてテーブルを作成する必要があります。問題は、表のヘッダーを表示される情報と適切に揃える方法がわからないことです。たとえば、ユーザーがプレーヤー 1 に Michael を入力し、プレーヤー 2 に Michael Jordan を入力した場合、テーブル ヘッダーは整列しません。文字の長さに関係なく、ヘッダーが表示された入力と適切に整列できるようにするためのアドバイスをいただければ幸いです。

これが私のコードです:

#include <iostream>
#include <string>
#include <iomanip>
#include <cstdlib>
using namespace std;


//struct of Basketball Player info
struct BasketballPlayerInfo
{
    string name; //player name

    int playerNum, //player number
        pointsScored; //points scored

};

int main()
{
    int index, //loop count
        total = 0; //hold total points
    const int numPlayers = 5; //nuymber of players
    BasketballPlayerInfo players[numPlayers]; //Array of players

    //ask user for Basketball Player Info
    cout << "Enter the name, number, and points scored for each of the 5 players.\n";

    for (index = 0; index < numPlayers; index++)
    {
        //collect player name
        cout << " " << endl;
        cout << "Enter the name of player # " << (index + 1);
        cout << ": ";

        //input validation
        if(!(getline(cin, players[index].name)))
        {
            cout << "Player Name must be alphabetical characters only!\n";
            cout << "Program terminating please start over." << endl;
            system("pause");
            exit(0);
        }

        //getline(cin, players[index].name);

        //collect players number
        cout << "Enter the number of player # " << (index + 1);
        cout << ": ";

        //input validation
        if(!(cin >> players[index].playerNum))
        {
            cout << "Player Name must be numeric characters only!\n";
            cout << "Program terminating please start over." << endl;
            system("pause");
            exit(0);
        }
        //collect points scored
        cout << "Enter points scored for player # " << (index + 1);
        cout << ": ";

        //input validation
        if(!(cin >> players[index].pointsScored))
        {
            cout << "Player Name must be numeric characters only!\n";
            cout << "Program terminating please start over." << endl;
            system("pause");
            exit(0);
        }

        cin.ignore();
    }

    //display
    cout << "\n";
    cout << "Here is the information for each player: \n";
    cout << fixed << showpoint << setprecision(2);
    cout << "\n";
    cout << "          \tName\tNumber\tPoints\n";
    cout << "------------------------------------------------" << endl;

    for(index = 0; index < numPlayers; index++)
    {
        cout << "Player # " << (index + 1);
        cout << ": \t" << players[index].name << "\t" << players[index].playerNum << "\t" << players[index].pointsScored << endl;
        cout << "------------------------------------------------" << endl;

    }

    //display total points scored by all players
    for(index = 0; index < numPlayers; index++)
    {
        //hold total
        total += players[index].pointsScored;
    }

    cout << "Total Points scored are: " << total << endl;

 system("pause");
return 0;

}
4

2 に答える 2

2

setwに属するioマニピュレータを使用できます#include <iomanip>

cout << setw(20) << "Column1"
     << setw(20) << "Column2"
     << setw(8) << "Column3";

または、 Boostライブラリを使用できます

//Boost.Formatを使用

cout << format("%-20s %-20s %-8s\n")  % "Column1" % "Column2" % "Column3";
于 2012-04-09T01:01:45.583 に答える
2

setwおよびsetfill関数を見てください。それらを使用して、列に最小幅を割り当てることができます。これにより、タブよりもはるかにクリーンな出力フォーマットが可能になります。

于 2012-04-09T01:01:49.667 に答える