Pregunta

I'm trying to left justify one side of a line and right justify the other side of the line, but im having trouble getting the right side to right justify. Could anyone catch my error?

//The following program will declare
#include <iostream>
#include <iomanip>

using namespace std;

const int HOUSING = 3500;                                       //housing cost
const int MEALS = 2000;                                         //meal cost
const int N_CRED_PER = 285;                                     //out of state credit cost
const int CRED_PER = 130;                                       //amount of money per credit(cost)
const int TAB = 30;                                             //precision
const int ADD_FEES = 6200;                                      //out of state fees for non-resident

int main()
{
  cout << "Grant Mercer section 1002 Assignment 6\n\n";
  int size, studentID, credits, i, valid,total;
  //size of loop, studentID to hold ID of student, credits to hold num
  //of credits the student will take, i to start loop
  char first, last, res, housing, meal;                         //first and last to hold initials of
                                                                //student, res to hold code
                                                                //if student is resident, meal to hold
                                                                //code if student has meals
  cin >> size;                                                  //grab length of loop in file
  cout << left;                                                 //manipulate stream
  cout << fixed << showpoint << setprecision(2);
  valid = size;                                                 //initially all entries are valid, but de
                                                                //cremented each time something goes wrong
  while  (i < size)
    {
      cin >> studentID >> first >> last >> credits >> res;      //read in mandatory data to vars
      cout << setw(TAB) << left <<  "Student #: " << right << studentID << endl;  //display id
      cout << setw(TAB) << left << "Initials: " << right << first << last << endl;//display initials
      if(credits > 0 && credits < 21)                           //if credits are fine
        {
          switch(res)                                           //find char in res
            {
            case 'R':                                           //if RESIDENT
            case 'r':
              cout << setw(TAB) << left << "Residency status: " << right << "Resident" << endl;
              cout << setw(TAB) << left << "Credits: " << right << credits << endl;
              cout << setw(TAB-10) << left << "Tuition: " << setw(10) << "$" << right << (double)CRED_PER * credits << endl;
              cout << setw(TAB-10) << left << "Total due: " << setw(10) << "$" << right << (double)CRED_PER * credits << endl;
              total += CRED_PER * credits;                      //add to total cost
            break;
            case 'N':                                           //if NON-RESIDENT
            case 'n':
              cout << setw(TAB) << left  << "Residency status: " << right <<  "Non-resident" << endl;
              cin >> housing >> meal;                            //since the student is non-resident, they
                                                                 //have a mean and house code
              cout << setw(TAB) << left << "Credits: " << right << credits << endl;
              cout << setw(TAB - 10) << left  << "Tuition: " << setw(10) << "$" << right << (double)credits * N_CRED_PER + ADD_FEES << endl;
              if(housing == 'H' || housing == 'h')
              {
                cout << setw(TAB - 10) << left << "Housing: " << setw(10) << "$" << right << (double)HOUSING << endl;
                if(meal == 'M' || meal == 'm')                  //if MEALS
                  {
                    cout << setw(TAB-10) << left << "Meal Plan: " << setw(10) << "$" << right << (double) MEALS << endl;
                    cout << setw(TAB-10) << left << "Total due: " << setw(10) << "$" << right << (double) MEALS + HOUSING + (credits * N_CRED_PER) + ADD_FEES << endl;
                    total += MEALS + HOUSING + (credits * N_CRED_PER) + ADD_FEES;
                                                                //add to total
                  }
                else                                             //if NO MEALS
                  {
                    cout << setw(TAB-10) << left << "Total due: " << setw(10) << "$" << right << (double)\
HOUSING + (credits *N_CRED_PER) + ADD_FEES << endl;
                    total += HOUSING + (credits * N_CRED_PER) + ADD_FEES;
                                                                //add to total
                    total += HOUSING + (credits * N_CRED_PER) + ADD_FEES;
                                                                //add to total
                  }
              }
              else                                              //if NO HOUSING NO MEALS
              {
                cout << setw(TAB-10) << left  << "Total due: " << setw(10) << "$" << right << (double)(cr\
edits * CRED_PER) + ADD_FEES
                     << endl;
                total += (credits * CRED_PER) + ADD_FEES;
              }
            break;
            }

        }
      else
      {
        cout << "INVLIAD CREDIT AMOUNT...\n";
        valid--;
      }
      i++;
      cout << endl << endl;
    }
  cout << "\nFINAL TOTALS\n";                                   //display final totals from students
  cout << right << setw(TAB) << left << "Valid request count: " << right << valid << endl;
  cout << setw(TAB) << left  << "Invalid requrest count: " << right << size - valid << endl;
  cout << setw(TAB - 10) << left  << "Total feed due: " << setw(10) << "$" << right << (double)total;
  cout << endl;
  return 0;
}

the output is all left justified, i dont understand what i need to do to make this all right justified. Thanks!

¿Fue útil?

Solución

You're forgetting to use setw() before printing each right aligned string with cout. For example, take the following line in your code:

cout << setw(TAB) << left << "Residency status: " << right << "Resident" << endl;

Before printing each string justified to the left or right, you must set a new width:

cout << setw(20) << left << "Residency status: " << setw(20) << right << "Resident" << endl;

Without a setw(), it assumes the width is zero, which basically ignores the right alignment.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top