2012-10-16 34 views
0

我想左對齊一行的右邊並右對齊該行的另一邊,但即時通訊有問題右對齊右對齊。有誰能抓住我的錯誤?std ::左/右的Iomanip錯誤

//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; 
} 

輸出都是左對齊的,我不明白我需要做什麼才能使這一切合理。謝謝!

+1

您正在使用'i'和'total'未初始化 - 您的程序有未定義的行爲。除此之外,輸出與預期的輸出有何不同?請舉出一個例子,很難從您發佈的代碼牆上猜測。 – jrok

回答

4

在打印每個右對齊的字符串前,您忘記使用setw(),並且使用cout。例如,採取以下行代碼:

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

之前打印每個字符串調整到左邊或右邊,你必須設置一個新寬度:

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

如果沒有setw(),它假定寬度爲零,基本上忽略了正確的對齊。