Reputation: 61
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.
Upvotes: 0
Views: 102
Reputation: 52
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;
}
Upvotes: 1