0

I am writing a converter program which converts different values from the imperial system to the international system as well as currency. I want to loop the program so that it does not just do one conversion. Here is my code:

#include "std_lib_facilities.h" #include "stdio.h" int a = 0; int b = 0; int c = 0; void money() { cout << "This will convert CAD to either USD or EUR\n"; cout << "Please input USD or EUR followed by an enter keystroke for conversion\n"; string a; while(cin >> a){ if( a == "USD"){ cout << "If you would like to convert USD into CAD, enter 1.\n"; cout << "If you would like to convert CAD into USD, enter 2.\n"; int x; cin >> x; if( x == 1){ cout << "Please enter the amount you wish to convert.\n"; double j; cin >> j; double k = j*1.29; cout << j << "USD is " << k << "CAD.\n"; } if ( x == 2){ cout << "Please enter the amount you wish to convert.\n"; double o; cin >> o; double p = o*0.77; cout << o << "CAD is " << p << "USD.\n"; } } if( a == "EUR"){ cout << "If you would like to convert EUR into CAD, enter 1.\n"; cout << "If you would like to convert CAD into EUR, enter 2.\n"; int y; cin >> y; if(y == 1){ cout << "Please enter the amount you wish to convert.\n"; double g; cin >> g; double h = g*1.46; cout << g << "EUR is " << h << "CAD.\n"; } if(y == 2){ cout << "Please enter the amount you wish to convert.\n"; double z; cin >> z; double x = z*0.69; cout << z << "CAD is " << x << "EUR.\n"; } } } } void weight() { double amount; cout << "This will convert pounds to kilograms.\n"; cout << "Please input the amount you wish to convert.\n"; cin >> amount; cout << "Would you like to convert " << amount << "kg to lb or the reverse?\n"; cout << "To convert kg to lb, please press 1. To convert lb to kg please press 2.\n"; int q; while(cin >> q){ if( q == 1){ double kg = amount*2.2; cout << amount << "kg is " << kg << "lb.\n"; } if( q == 2){ double lb = amount*0.5; cout << amount << "lb is " << lb << "kg.\n"; } } } void temperature() // t to f and f to t { } void setup() { cout << "Please enter either c,w or t for the corresponding conversions.\n"; cout << "(Where c is for currency, w is for weight, and t is for temperature.\n"; string a; while ( cin >> a){ if( a == "c"){ money(); } if( a == "w"){ weight(); } if( a == "t"){ temperature(); } } } int main() // loop it to make more than one conversion { cout << "Welcome to the ultimate converter app.\n"; setup(); cout << "Would you like to perform another conversion? (Y/N)\n"; string y; while(cin >> y){ if( y == "Y"){ setup(); } if( y == "N"){ exit (EXIT_FAILURE); } } return 0; } 

The program does work as expected but it does not loop at the end. Afer I enter the last command it just freezes, as in return 0 freezes.

I would appreciate any help thanks.

1
  • 2
    What does your debugger do when you step through your code? Commented Dec 10, 2017 at 19:32

1 Answer 1

1

I just tried your code and exactly as you're saying it runs just fine the first time. The problem though is that it get's stuck in loops. There are two main problems here as far as I can see.

You're using while loops in every function when you really only need one in main. Try to keep down the number of "while" loops in these scenarios. The second thing I saw was your use of "cin >> variable" as an argument. Try to stay away from this and instead use a simple bool variable.
Down here I've fixed your code in a dirty way but it works. Hope this helped :D

int a = 0; int b = 0; int c = 0; void money() { cout << "This will convert CAD to either USD or EUR\n"; cout << "Please input USD or EUR followed by an enter keystroke for conversion\n"; string a; while (cin >> a) { if (a == "USD") { cout << "If you would like to convert USD into CAD, enter 1.\n"; cout << "If you would like to convert CAD into USD, enter 2.\n"; int x; cin >> x; if (x == 1) { cout << "Please enter the amount you wish to convert.\n"; double j; cin >> j; double k = j * 1.29; cout << j << "USD is " << k << "CAD.\n"; break; } if (x == 2) { cout << "Please enter the amount you wish to convert.\n"; double o; cin >> o; double p = o * 0.77; cout << o << "CAD is " << p << "USD.\n"; break; } } if (a == "EUR") { cout << "If you would like to convert EUR into CAD, enter 1.\n"; cout << "If you would like to convert CAD into EUR, enter 2.\n"; int y; cin >> y; if (y == 1) { cout << "Please enter the amount you wish to convert.\n"; double g; cin >> g; double h = g * 1.46; cout << g << "EUR is " << h << "CAD.\n"; break; } if (y == 2) { cout << "Please enter the amount you wish to convert.\n"; double z; cin >> z; double x = z * 0.69; cout << z << "CAD is " << x << "EUR.\n"; break; } } } } void weight() { double amount; cout << "This will convert pounds to kilograms.\n"; cout << "Please input the amount you wish to convert.\n"; cin >> amount; cout << "Would you like to convert " << amount << "kg to lb or the reverse?\n"; cout << "To convert kg to lb, please press 1. To convert lb to kg please press 2.\n"; int q; while (cin >> q) { if (q == 1) { double kg = amount * 2.2; cout << amount << "kg is " << kg << "lb.\n"; break; } if (q == 2) { double lb = amount * 0.5; cout << amount << "lb is " << lb << "kg.\n"; break; } } } void temperature() // t to f and f to t { } void setup() { cout << "Please enter either c,w or t for the corresponding conversions.\n"; cout << "(Where c is for currency, w is for weight, and t is for temperature.\n"; string a; while (cin >> a) { if (a == "c") { money(); } if (a == "w") { weight(); } if (a == "t") { temperature(); } break; } } int main() // loop it to make more than one conversion { cout << "Welcome to the ultimate converter app.\n"; setup(); string y; while (true) { cout << "Would you like to perform another conversion? (Y/N)\n"; cin >> y; if (y == "Y") { setup(); } else if (y == "N") { exit(EXIT_FAILURE); } } return 0; } 
Sign up to request clarification or add additional context in comments.

3 Comments

Thank you very much!! I'll try to understand more of my mistakes.
However, I don't really understand why cin >> variable isn't a good argument.
cin << variable isn't really a good argument for the simple reason that it has the same effect as a while (true) loop. It will never end unless a break command is called. Try to instead add a bool variable as the loop argument, it's more readable and makes more sense.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.