2017-02-09 1 views
-1

Voici ma tentative d'une solution que j'ai écrite pour un exercice dans le manuel de programmation de Bjarne Stroustrup et dans le livre C++. Malheureusement, la section que j'ai écrite pour donner le montant total des pièces saisies ne fonctionne pas comme je voudrais!Conversion de base C++, puis addition des entrées utilisateur

Une réponse rapide et je serais très reconnaissant, mais si quelqu'un a aussi le temps pourrait-il m'aider à introduire une vérification d'erreur de base?

La façon dont je voudrais le faire serait après qu'une entrée de l'utilisateur est nécessaire (par exemple combien de 20p avez-vous?), Pour vérifier si l'utilisateur a entré int. Si non, fournissez un message d'erreur subtil et une chance de répéter la même question, plutôt que d'arrêter le programme ou de démarrer le programme depuis le début!

#include "../../std_lib_facilities.h" 

int main() { 
int one, ten, twenty, fifty, one_pound, two_pound; 
double amount; 
amount = (one * 0.01) + (ten * 0.1) + (twenty * 0.2) + (fifty * 0.5) + one_pound + (two_pound * 2); 
cout << "Welcome to the change counter app!\nHow many 1p's do you have?\n"; 
cin >> one; 
cout << "How many 10p's do you have?\n"; 
cin >> ten; 
cout << "How many 20p's do you have?\n"; 
cin >> twenty; 
cout << "How many 50p's do you have?\n"; 
cin >> fifty; 
cout << "How many £1 coin's do you have?\n"; 
cin >> one_pound; 
cout << "How many £2 coin's do you have?\n"; 
cin >> two_pound; 
cout << "You have: " << one << " 1p coins!\n" 
    << "You have: " << ten << " 2p coins!\n" 
    << "You have: " << twenty << " 20p coins!\n" 
    << "You have: " << fifty << " 50p coins!\n" 
    << "You have: " << one_pound << " £1 coins!\n" 
    << "You have: " << two_pound << " £2 coins!\n" 
    << "The total amount of money you have is: " << amount << "\n"; 
} 
+0

vous déplacer en quantité = (un * 0,01) + (.... '' après la dernière cin' et avant dernière 'cout' – Garf365

+0

Bienvenue sur Stack Overflow. Je vous suggère de jeter un oeil autour de l'Centre d'aide, en particulier la section sur "Comment poser une bonne question". –

Répondre

0

Vous avez deux problèmes:

La première est qu'en l'absence de boucles, le code passe de haut en bas. Cela signifie que vous calculez amountavant vous avez lu l'entrée.

Le deuxième problème est que lorsque vous calculez amount (actuellement, au mauvais endroit) que vous utilisez les variables one, ten, etc. avant ils sont initialisés. Les variables locales non initialisées auront une valeur indéterminée, et leur utilisation entraînera un comportement non défini.

La solution simple aux deux problèmes consiste à déplacer le calcul de amount-après vous avez lu l'entrée, mais avant vous écrivez la sortie.

0

Le problème est que vous calculez amount avec des variables non initialisées. Vous devez calculer amount après que toutes les variables ont été initialisées. Vos variables ne sont initialisées que lorsque toutes les instructions cin ont été exécutées.

Vous devez déplacer

amount = (one * 0.01) + (ten * 0.1) + (twenty * 0.2) + (fifty * 0.5) + one_pound + 
(two_pound * 2); 

après la dernière déclaration cin.

int main() { 
int one, ten, twenty, fifty, one_pound, two_pound; 
double amount; 

cout << "Welcome to the change counter app!\nHow many 1p's do you have?\n"; 
cin >> one; 
cout << "How many 10p's do you have?\n"; 
cin >> ten; 
cout << "How many 20p's do you have?\n"; 
cin >> twenty; 
cout << "How many 50p's do you have?\n"; 
cin >> fifty; 
cout << "How many £1 coin's do you have?\n"; 
cin >> one_pound; 
cout << "How many £2 coin's do you have?\n"; 
cin >> two_pound; 

amount = (one * 0.01) + (ten * 0.1) + (twenty * 0.2) + (fifty * 0.5) + one_pound + (two_pound * 2); 
cout << "You have: " << one << " 1p coins!\n" 
    << "You have: " << ten << " 2p coins!\n" 
    << "You have: " << twenty << " 20p coins!\n" 
    << "You have: " << fifty << " 50p coins!\n" 
    << "You have: " << one_pound << " £1 coins!\n" 
    << "You have: " << two_pound << " £2 coins!\n" 
    << "The total amount of money you have is: " << amount << "\n"; 
}