2015-09-13 1 views
2

J'ai un programme simple qui demande le nom d'un film et le nombre de tickets vendus pour set1 et set2. Ensuite, il fait un peu de calcul avec ces valeurs et affiche les résultats. Le seul problème que j'ai, c'est que je n'arrive pas à aligner les valeurs décimales comme je le veux.Impossible d'aligner les nombres décimaux avec précision

Les trois dernières lignes de sortie dans la console doivent ressembler à ceci tout le temps (avec les signes dollar et les points décimaux alignés): . Mais quand je tape 1 pour set1 de tickets, et 0 pour set2 de tickets et vice versa, cela ressemble à ceci: image. Des idées sur comment puis-je faire la sortie TOUJOURS aligner comme dans la première capture d'écran? Merci d'avance.

#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; 
    } 

Répondre

0

Je pense que votre problème est que vous définissez la largeur sur les signes dollar plutôt que sur vos chiffres.

Cela semble fixer pour moi:

#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; 
} 

Rappelez-vous setw() affecte la chose qui vient après il.

+0

Vous l'avez cloué. Si simple, pourtant je l'ai raté! Merci Monsieur. – Blueshift