2015-09-13 5 views
2

У меня есть простая программа, которая запрашивает имя фильма и количество билетов, проданных для set1 и set2. Затем он выполняет некоторые вычисления с этими значениями и отображает результаты. Единственная проблема, с которой я сталкиваюсь, заключается в том, что я не могу представить десятичные значения так, как я их хочу.Не может показаться, что выстроить десятичные числа точно

Последние три строки вывода в консоли должны выглядеть так все время (со знаками доллара и десятичными точками): image. Но когда я вводил 1 для set1 билетов и 0 для set2 билетов и наоборот, он выглядит следующим образом: image. Любые идеи о том, как я могу сделать вывод ALWAYS красивым, как на первом снимке экрана? Заранее спасибо.

#include <iostream> 
    #include <string> 
    #include <iomanip> 

    using namespace std; 

    int main() { 

    string film = ""; 

    int set1 = 0; 
    int set2 = 0; 
    // the cinema always takes this 20% cut. 
    const double CINEMA_FEE = 0.20; 
    double profit = 0; 
    double profitMinusFee = 0; 
    double paidToMovieMaker = 0; 

    cout << "What is the name of the film: "; 
    getline(cin, film); 

    cout << "How many tickets for set1 sold: "; 
    cin >> set1; 

    cout << "How many tickets for set2 sold: "; 
    cin >> set2; 

    cout << "Film Name:" << setw(20) << "\"" << film << "\"" << endl; 
    cout << "Set1 tickets sold:" << setw(16) << set1 << endl; 
    cout << "Set2 tickets sold:" << setw(16) << set2 << endl; 

    set1 *= 10; 
    set2 *= 6; 
    profit = set1 + set2; 
    profitMinusFee = profit * CINEMA_FEE; 
    paidToMovieMaker = profit - profitMinusFee; 
    // needs to always show two decimal points and fixed 
    cout << setprecision(2) << fixed; 
    cout << "The total monetary profit:" << setw(5) << "$ " << profit << endl; 
    cout << "The net monetary profit:" << setw(7) << "$ " << profitMinusFee << endl; 
    cout << "Total paid to movie maker:" << setw(5) << "$ " << paidToMovieMaker << endl; 

    return 0; 
    } 

ответ

0

Я думаю, ваша проблема в том, что вы устанавливаете ширину на знаках доллара, а не на своих номерах.

Это, кажется, чтобы исправить это для меня:

#include <iostream> 
#include <string> 
#include <iomanip> 

using namespace std; 

int main() { 

    string film = ""; 

    int set1 = 0; 
    int set2 = 0; 
    // the cinema always takes this 20% cut. 
    const double CINEMA_FEE = 0.20; 
    double profit = 0; 
    double profitMinusFee = 0; 
    double paidToMovieMaker = 0; 

    cout << "What is the name of the film: "; 
    getline(cin, film); 

    cout << "How many tickets for set1 sold: "; 
    cin >> set1; 

    cout << "How many tickets for set2 sold: "; 
    cin >> set2; 

    cout << "Film Name:" << setw(20) << "\"" << film << "\"" << endl; 
    cout << "Set1 tickets sold:" << setw(16) << set1 << endl; 
    cout << "Set2 tickets sold:" << setw(16) << set2 << endl; 

    set1 *= 10; 
    set2 *= 6; 
    profit = set1 + set2; 
    profitMinusFee = profit * CINEMA_FEE; 
    paidToMovieMaker = profit - profitMinusFee; 
    // needs to always show two decimal points and fixed 
    cout << setprecision(2) << fixed; 
    cout << "The total monetary profit: $ " << setw(10) << profit << endl; 
    cout << "The net monetary profit : $ " << setw(10) << profitMinusFee << endl; 
    cout << "Total paid to movie maker: $ " << setw(10) << paidToMovieMaker << endl; 

    return 0; 
} 

Помните setw() влияет на вещь, которая приходит после его.

+0

Вы пригвоздили его. Так просто, но я пропустил это! Спасибо, сэр. – Blueshift