выравнивание и чтение выходных данных C ++, форматирование вывода - PullRequest
0 голосов
/ 20 февраля 2019

Я пишу этот код для своего класса программирования, и у меня все остальное работает, однако мое форматирование вывода не работает для меня.

#include <iostream>
#include <iomanip>
#include <ios>

    using namespace std;

    int main()
    {
        double tip_fifteen;
        double tip_twenty;
        double tax;
        double bill;
        char dollars = '$';
        float meal_cost;

        cout << "Enter the meal cost: ";
        cin >> meal_cost;
        tip_twenty = meal_cost * .20;
        tip_fifteen = meal_cost * .15;
        tax = meal_cost * 0.0975;
        cout << "******************************************" << endl;

        //beginning outputs
        int digits;
        digits = meal_cost * 100 / 100;
        cout << setw(10) << left << "Meal Cost " << dollars;
        cout << setw(to_string(digits).length() + 3) << fixed << showpoint << setprecision(2) << meal_cost << endl;

        cout << setw(10) << left << "Tax " << dollars;
        cout << setw(to_string(digits).length() + 3) << fixed << showpoint << setprecision(2) << tax << endl;

        cout << setw(10) << left << "Tip (15%) " << dollars;
        cout << setw(to_string(digits).length() + 3) << fixed << showpoint << setprecision(2) << tip_fifteen << endl;

        //tip outputs then final output statements
        cout << setw(10) << left << fixed << setprecision(2) << "Tip (20%) " << dollars << tip_twenty << endl;
        bill = tip_fifteen + meal_cost + tax;
        cout << "Your total bill is " << fixed << setprecision(2) << dollars << bill << " after 15% gratuity." << endl << "or" << endl;
        bill = tip_twenty + meal_cost + tax;
        cout << "Your total bill is " << fixed << setprecision(2) << dollars << bill << " after 20% gratuity." << endl;



return 0;

Я хочу, чтобы мой вывод выглядел следующим образом

Enter the meal cost: 56
******************************************
Meal Cost $ 56.00
Tax       $  5.46
Tip (15%) $  8.40
Tip (20%) $ 11.20
Your total bill is 69.86 after 15% gratuity.
or
Your total bill is 72.66 after 20% gratuity.

мой вывод выглядит следующим образом

Enter the meal cost: 56
******************************************
Meal Cost $56.00
Tax       $5.46 
Tip (15%) $8.40 
Tip (20%) $11.20
Your total bill is $69.86 after 15% gratuity.
or
Your total bill is $72.66 after 20% gratuity.

У меня проблема с использованием setw с плавающей точкой, однако это не работает, когда я пытаюсь установить ту же переменную, что и int.Я также пытался использовать setw (25), чтобы посмотреть, будет ли это работать как-то, к сожалению, у него нет

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Вам нужно использовать right, если вы хотите, чтобы они были выровнены по правому краю, вам также нужно добавить пробел "" после dollars

cout << setw(10) << left << "Meal Cost " << dollars << " ";
cout << setw(to_string(digits).length() + 3) << fixed << right << showpoint << setprecision(2) << meal_cost << endl;

Для этого ко всем печатным выражениями вы получите:

******************************************
Meal Cost $ 56.00
Tax       $  5.46
Tip (15%) $  8.40
Tip (20%) $ 11.20
0 голосов
/ 20 февраля 2019

Для того, чтобы в столбце цены были отступы, setw должен быть установлен на достаточно большую ширину.

Например:

std::cout << "$" << std::setw(10) << std::fixed
          << std::setprecision(2) << 56.0f << std::endl;

Отпечатки:

$     56.00

Ваш код устанавливает ширину равной:

std::to_string(digits).length() + 3

Это всего 5 символов, что достаточно для "56.00".Для дополнительного заполнения слева вы должны увеличить setw width.

...