Мой вывод должен выравниваться по $, как мои профессора. Однако я не уверен, как использовать setw()

Мой вывод не выравнивается по $

Я попробовал cout ‹‹ left ‹‹ setw(1) на всех своих cout

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

int main() {
    // insert code here...

    float RENT_OR_MORTGAGE;
    float UTILITIES;
    float PHONE;
    float CABLE;
    // H stands for housing
    float TOTAL_MONTHLY_HOUSING_COSTS;
    float TOTAL_ANNUAL_HOUSEING_COSTS;
    char dollars = '$';

    cout << "Enter your monthly costs for the following: " << endl << endl;

    cout << "Rent or Mortgage: ";
    cin >> dollars >> RENT_OR_MORTGAGE;

    cout << "Utilities: " << setw(10) << left;
    cin  >> dollars >> UTILITIES;

    cout << "Phone(s): " << setw(10) << left;
    cin  >> dollars >> PHONE;

    cout << "Cable: " << setw(10) << left;
    cin  >> dollars >> CABLE;

    TOTAL_MONTHLY_HOUSING_COSTS = RENT_OR_MORTGAGE + UTILITIES + PHONE + CABLE;
    TOTAL_ANNUAL_HOUSEING_COSTS = (RENT_OR_MORTGAGE + UTILITIES + PHONE + CABLE) * 12;

    cout << fixed << setprecision(2) << setw(dollars) << left << "Total monthly housing costs: "  << dollars << TOTAL_MONTHLY_HOUSING_COSTS << endl << setw(dollars) << left << "Total annual housing costs: " << dollars << TOTAL_ANNUAL_HOUSEING_COSTS << endl;

    return 0;




 I want an output of 


Enter your monthly costs for the following:

Rent or mortgage: $1348
Utilities: $215
Phone(s):  $99
Cable:     $69

Total monthly housing costs: $ 1731.00
Total annual housing costs:  $20772.00

my output is 


Enter your monthly costs for the following: 

Rent or Mortgage: $1348
Utilities: $512
Phone(s):  $99
Cable:     $69
Total monthly housing costs:        $2028.00
Total annual housing costs:         $24336.00

I want it to align on the $. I tried setw() and i would keep changing the number on the inside but nothing was changing. I have #include but no changes. This is small project where I'm trying to match the correct outcome. Please share some advice, I'm looking forward to reading it.


person Brett    schedule 18.02.2019    source источник
comment
Хотя не существует стандарта в отношении именования и символов, все символы верхнего регистра широко используются для макросов препроцессора или символических констант.   -  person Some programmer dude    schedule 18.02.2019
comment
Что касается выравнивания знаков доллара, просто добавьте пробелы в свои строки. Затем вывод сумм, подумайте, где добавить форматирование. Я также предлагаю вам разделить окончательный вывод на два отдельных вывода. Так будет намного проще убедиться, что они выровнены одинаково.   -  person Some programmer dude    schedule 18.02.2019
comment
мой вывод на самом деле   -  person Brett    schedule 18.02.2019
comment
Введите свои ежемесячные расходы на следующее: Аренда или ипотека: 1348 долларов США Коммунальные услуги: 215 долларов США Телефон(ы): 99 долларов США Кабельное телевидение: 69 долларов США Общие ежемесячные расходы на жилье: 1731,00 долларов США Общие годовые расходы на жилье: 20772,00 долларов США   -  person Brett    schedule 18.02.2019
comment
Пожалуйста, отредактируйте свой вопрос, если хотите добавить информацию.   -  person Some programmer dude    schedule 18.02.2019


Ответы (1)


Как уже указывалось, вы можете использовать пробелы, чтобы получить нужный формат.

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

int main() {

    float RENT_OR_MORTGAGE;
    float UTILITIES;
    float PHONE;
    float CABLE;
    // H stands for housing
    float TOTAL_MONTHLY_HOUSING_COSTS;
    float TOTAL_ANNUAL_HOUSEING_COSTS;

    cout << "Enter your monthly costs for the following: " << endl << endl;
    cout << "Rent or Mortgage: $";
    cin >> RENT_OR_MORTGAGE;

    cout << "Utilities: $";
    cin  >> UTILITIES;

    cout << "Phone(s):  $";
    cin  >> PHONE;

    cout << "Cable:     $";
    cin  >> CABLE;

    TOTAL_MONTHLY_HOUSING_COSTS = RENT_OR_MORTGAGE + UTILITIES + PHONE + CABLE;
    TOTAL_ANNUAL_HOUSEING_COSTS = (RENT_OR_MORTGAGE + UTILITIES + PHONE + CABLE) * 12;


    int digits = (TOTAL_ANNUAL_HOUSEING_COSTS * 100 / 100);
    cout << "Total monthly housing costs: $" << setw(to_string(digits).length() + 3) << fixed << right << setprecision(2) << TOTAL_MONTHLY_HOUSING_COSTS << endl;
    cout << "Total annual housing costs:  $" << setw(to_string(digits).length() + 3) << fixed << right << setprecision(2) << TOTAL_ANNUAL_HOUSEING_COSTS << endl;

    return 0;
}

Выход

Enter your monthly costs for the following: 

Rent or Mortgage: $1348
Utilities: $215
Phone(s):  $99
Cable:     $69
Total monthly housing costs: $ 1731.00
Total annual housing costs:  $20772.00
person donpsabance    schedule 18.02.2019
comment
Как вы работаете с setw(to_string(digits).length() + 3)? - person Brett; 19.02.2019
comment
Я добавил 3 из-за .00, который добавляется из заданной точности. - person donpsabance; 19.02.2019
comment
Как бы я мог ввести его с помощью float? Я спрашиваю, потому что у меня есть второе задание, похожее на это. - person Brett; 20.02.2019
comment
+n + 1, где n — количество десятичных знаков и + 1 из-за добавленной точки. Это в значительной степени значение setprecision + 1. Обратите внимание, что десятичные дроби должны быть fixed - person donpsabance; 20.02.2019
comment
поэтому я установил его вместе с setpercision - person Brett; 20.02.2019
comment
а также почему вы использовали цифры вместо общей годовой стоимости жилья? - person Brett; 20.02.2019
comment
но это должно быть с int? - person Brett; 20.02.2019
comment
Я использовал общую сумму, потому что в ней больше цифр, поэтому месячная будет соответствовать ей. Не уверен, что вы подразумеваете под словом int. - person donpsabance; 20.02.2019
comment
вы переопределили общий годовой доход как целые числа; Мне было интересно, как я могу написать это, используя числа с плавающей запятой, такие как числа с плавающей запятой; - person Brett; 20.02.2019
comment
Я сделал int ‘digits’, чтобы получить количество цифр в числе. бывший. 7382 состоит из 4 цифр, это всего лишь один из способов определить длину. - person donpsabance; 20.02.2019
comment
Не могли бы вы проверить мой другой пост? Я пытался применить то, чему вы меня научили, к другой проблеме. stackoverflow.com/questions/54776464/ - person Brett; 20.02.2019