首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::left/right的Iomanip错误

std::left/right的Iomanip错误
EN

Stack Overflow用户
提问于 2012-10-17 04:19:16
回答 1查看 4.9K关注 0票数 0

我试图左对齐一条线的一侧,右对齐这条线的另一边,但我在将右边对齐到右对齐时遇到了麻烦。有人能发现我的错误吗?

代码语言:javascript
复制
//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;
}

输出都是左对齐的,我不明白我需要做什么才能让这一切都对齐。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-17 04:37:38

在用cout打印每个右对齐的字符串之前,您忘记了使用setw()。例如,在您的代码中使用以下行:

代码语言:javascript
复制
cout << setw(TAB) << left << "Residency status: " << right << "Resident" << endl;

在打印每个字符串左对齐或右对齐之前,必须设置新的宽度:

代码语言:javascript
复制
cout << setw(20) << left << "Residency status: " << setw(20) << right << "Resident" << endl;

如果没有setw(),它将假定宽度为零,这基本上忽略了右对齐。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12922744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档