Search code examples
c++alignmentiomanipsetw

C++ iomanip Alignment


I'm trying to align my output but for some reason I can't get it to how I want it, and it's really frustrating. The title won't align right. I don't know if I'm using setw() properly.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;
#include <assert.h>
#include <iomanip>
using std::setw;
using std::right;
using std::left;

//Movie Struct to hold movie data
struct MOVIES
{
    string Title; //Name of movie
    int CriticRating; //Critic rating 1-100
    int AudRating; //Audiences' rating 1-100
};
MOVIES Movies[10] = { { "The Wizard of Oz", 99 , 70 },
                      { "The Third Man"   , 78, 45 },
                      { "Citizen Kane"    , 86, 85 },
                      { "Charlie Chaplin in Modern Times", 56, 95 },
                      { "All About Eve"   , 78, 94 },
                      { "The Cabinet of Dr. Caligari"    , 76, 90 },
                      { "The God Father"  , 99 , 98 },
                      { "E.T. The Extra-Terrestrial"     , 98 , 71 },
                      { "The Beatles: A Hard Day's Night", 87 , 90 },
                      { "Monty Python and the Holy Grail", 100, 100 }
                    };


void PrintMovies(MOVIES* movies, int numMovies)
{
    cout << "Movies" << endl
         << "Critic" << setw(10)
         << "Audience" << setw(10)
         << "Title" << endl;

    for (int i = 0; i < numMovies; i++)
    {
        cout << setw(6);
        cout << movies[i].CriticRating << right;
        cout << setw(6);
        cout << movies[i].AudRating << right;
        cout << setw(6);
        cout << movies[i].Title << left;
        cout << endl;
    };
}

int main()
{
    PrintMovies(Movies, 10);

    return 0;
}

//Sample Output of what I need Results wanted

However this is what I'm getting instead Unwanted result..


Solution

  • If this is what you want

    enter image description here

    #include <iomanip>
    using std::setw;
    using std::right;
    using std::left;
    
    //Movie Struct to hold movie data
    struct MOVIES
    {
        string Title; //Name of movie
        int CriticRating; //Critic rating 1-100
        int AudRating; //Audiences' rating 1-100
    };
    MOVIES Movies[10] = { { "The Wizard of Oz", 99, 70 },
    { "The Third Man", 78, 45 },
    { "Citizen Kane", 86, 85 },
    { "Charlie Chaplin in Modern Times", 56, 95 },
    { "All About Eve", 78, 94 },
    { "The Cabinet of Dr. Caligari", 76, 90 },
    { "The God Father", 99, 98 },
    { "E.T. The Extra-Terrestrial", 98, 71 },
    { "The Beatles: A Hard Day's Night", 87, 90 },
    { "Monty Python and the Holy Grail", 100, 100 }
    };
    
    
    void PrintMovies(MOVIES* movies, int numMovies)
    {
        cout << " Critic " << setw(6) << " Audience " << setw(0) << " Title " << endl;
    
        for (int i = 0; i < numMovies; i++)
        {
            cout << setw(7) << right << movies[i].CriticRating << setw(10) << right << movies[i].AudRating <<"  "<< setw(30) << left << movies[i].Title << endl;
        }
    }
    
    int main()
    {
        PrintMovies(Movies, 10);
    
        return 0;
    }