setw(n) и выравнивание не работает так, как мне нужно - C++

Вот мой код для контекста. Это мое второе введение в домашнее задание по курсу программирования, и я использовал все, что мы узнали в этом задании. Мне не разрешено использовать то, чему я не научился.

Часть, которая меня интересует, - это вывод в самом низу (закомментированный как вывод информации). В настоящее время я изо всех сил стараюсь выровнять все идеально правильно (последняя буква или цифра в правом столбце должны совпадать друг с другом, как если бы я печатал их справа.

Все, кроме имени пациента, типа помещения и дней, проведенных в больнице, выровнены правильно, выровнены десятичные дроби и все. Изменение setw(10) на что-то большее не приносит никакой пользы (например, у меня было все для setw(40), и все равно ничего не выровнялось должным образом. Есть идеи?

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

//constants
const float PRIVATE = 125.00;
const float SEMI = 95.00;
const float WARD = 75.00;
const float TV = 3.50;
const float PHONE = 1.75;

int main()
{   //local variables
    string fname, lname, roomType, tvAccess, phoneAccess;
    int id, days;
    float roomBill, roomPrice, tvCharge, phoneCharge;
    bool error = false;

    //data collection/output
    cout << "Welcome to the hospital self-service program. Your bill will be calculated here.\n\n" << endl;
    cout << "Please enter your first and last name: ";
    cin >> fname;
    cin >> lname;
    cout << fname << " " << lname << ", please enter the four digit identification number found on your hospital wristband: ";
    cin >> id;
    cout << "Please enter the number of days spent in the hospital: ";
    cin >> days;
    cout << "\nEnter the type of room you stayed in: \nEnter P for room type: Private \nEnter S for room type: Semi-Private\nEnter W for room type: Ward \n" << endl;
    cin >> roomType;
    cout << "\nDid your room come with access to Television? Y/N: ";
    cin >> tvAccess;
    cout << "Did your room come with access to a Telephone? Y/N: ";
    cin >> phoneAccess;

    //if and elses
    if (roomType == "P" || roomType == "p")
    {
        error = false;
        roomType = "Private Room";
        roomPrice = PRIVATE;
    }
    else if (roomType == "S" || roomType == "s")
    {
        error = false;
        roomType = "Semi-Private Room";
        roomPrice = SEMI;

    }
    else if (roomType == "W" || roomType == "w")
    {
        error = false;
        roomType = "Ward Room";
        roomPrice = WARD;

    }
    else
    {
        cout << "Room type not valid. Exit the program and try again." << endl;
        error = true;
    }
    if (tvAccess == "Y" || tvAccess == "y")
        tvCharge = TV;
    else
        tvCharge = 0;

    if (phoneAccess == "Y" || phoneAccess == "y")
        phoneCharge = PHONE;
    else
        phoneCharge = 0;


    //information output
    cout << fixed << setprecision(2) << showpoint << endl;
    cout << setw(24) << left << "\n\nPatient Full Name: " << setw(10) << right << fname << " " << lname << endl;
    cout << setw(24) << left << "Identification Number: " << setw(10) << right << id << endl;
    cout << setw(24) << left << "Days spent in hospital: " << setw(10) << right << days << " day(s)" <<  endl;
    cout << setw(24) << left << "Room Type: " << setw(10) << right << roomType << endl;
    cout << setw(24) << left << "Room Charge: " << setw(10) << right << roomPrice * days << endl;
    cout << setw(24) << left << "Television Charge: " << setw(10) << right << tvCharge * days << endl;
    cout << setw(24) << left << "Telephone Charge: " << setw(10) << right << phoneCharge * days << endl;
    cout << setw(24) << left << "Total Charge: " << setw(10) << right << days * (phoneCharge + tvCharge + roomPrice) << endl;

    system("pause");
    return 0;
}

Это изображение в целях разъяснения.

1 ответ

Причина, по которой они не отформатированы правильно, заключается в том, что setw в

setw(10) << right << fname << " " << lname << endl;

а также

setw(10) << right << days << " day(s)" <<  endl;

относится только к первой переменной, т.е. fname а также days, Все остальное просто добавлено. Вам необходимо объединить эти строки перед использованием setw Вот.

Другие вопросы по тегам