循环功能

时间:2017-12-10 19:25:19

标签: c++

我正在编写一个转换器程序,它将不同的值从英制系统转换为国际系统以及货币。 我想循环程序,以便它不只是做一次转换。这是我的代码:

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

该程序按预期工作,但最后不会循环。在我输入最后一个命令时它就会冻结,就像返回0冻结一样。

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

我刚试过你的代码,就像你说的那样第一次运行得很好。但问题是它会陷入循环中。据我所知,这里有两个主要问题。

当你在main中只需要一个while循环时,你会在每个函数中使用while循环。尽量减少&#34;而#34;在这些场景中循环。我看到的第二件事是你使用&#34; cin&gt;&gt;变量&#34;作为一个论点。尽量远离这个,而是使用一个简单的bool变量 在这里,我已经以肮脏的方式修复了你的代码,但它确实有效。希望这有助于: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;
}