0

インストラクターは、ユーザーが選択を再開し、別の選択を続行するオプションを追加したい場合にのみ、メニューを再表示できるプログラムを作成することを望んでいます。

私が抱えている問題は、ユーザーが1から4までの数字を選択して選択を完了すると、プログラムはユーザーに別の選択を続行するかどうかを尋ね、ユーザーがいいえと言った場合でもプログラムは数字を選択するように求めますプログラムを終了せずに。

これまでに書いたコードは次のとおりです。

#include<iostream>

using namespace std;
int sp;
int speed = 0;
int M, K, c, x;
const int MINspeed = 10;
const int MAXspeed = 40;
int GetSpeed();
int GetMinSpeed();
int GetMaxSpeed();
int CheckContinue();
int selection;
int GetSpeed()
{
    char c;
    while(true)
    {
        cout << "\nDo you want the speed in mph or km/h? \n" 
            << "\nEnter M or K followed by Enter: " << endl;
        cin >> c;

        if( (c != 'M')&& (c != 'K'))
        {
            cout << "Incorrect Selection. Try Again! \n\n";
            break;
        }

        if ( c == 'M')
        {
            cout << "\nSpeed in mph: " << speed << endl;
            return speed;
        }
        else if(c == 'K')
        {
            double toKmPerHour = 1.61;
            double speedInKmPerHour = speed * toKmPerHour;
            cout << "\nSpeed in km/h:" << speedInKmPerHour << endl;
            break;
        }
        CheckContinue();
    }
    return 0;
}
int GetMinSpeed()
{
    cout << "MIN speed = " << MINspeed << endl;
    CheckContinue();
    return 0;
}
int GetMaxSpeed()
{
    cout << "MAX speed = " << MAXspeed << endl;
    CheckContinue();
    return 0;
}
/*int SetSpeed(int sp)
{
cout << "The Set Speed is " << sp << endl;
return 0;
}
*/
void SetSpeed()
{
    cout << "Input your speed: ";
    cin >> speed;
    CheckContinue();
}
int CheckContinue(void)
{
    char x;
    while(true)
    {
        cout << "\nDo you want to continue with another selection? \n" 
            << "\nEnter Y or N followed by Enter: " << endl;
        cin >> x;
        if ( x == 'Y')
        {
            int selection;

            cout << "Selection Menu" << endl;
            cout << "--------------" << endl;
            cout << "\n1. Set Speed" << endl;
            cout << "2. Get Speed" << endl;
            cout << "3. Get MAX Speed" << endl;
            cout << "4. Get MIN Speed" << endl;
            cout << "5. Exit" << endl;
            cout << "\nYour selection :" <<endl;
            cin >> selection;
            switch(selection)
            {
            case 1:
                SetSpeed();
                break;

            case 2:
                GetSpeed();
                break;

            case 3:
                GetMaxSpeed();
                break;

            case 4:
                GetMinSpeed();
                break;

            case 5:
                cout << "Good Bye" << endl;
                break;
            }
        }
        else if(x == 'N')
        {
            break;
        }
    }
    return 0;
}

/* 
In this menu function, it will ask the user to input the selection, ranging from 1 to 5. 
If the user puts a number that is not between 1 to 5 or letters, then the program will 
ask the user to input a valid selection.
*/
void menu()
{
    int selection;

    cout << "Selection Menu" << endl;
    cout << "--------------" << endl;
    cout << "\n1. Set Speed" << endl;
    cout << "2. Get Speed" << endl;
    cout << "3. Get MAX Speed" << endl;
    cout << "4. Get MIN Speed" << endl;
    cout << "5. Exit" << endl;
    int bye = 0;
    while(1)
    {
        cout << "\nYour selection :" <<endl;
        cin >> selection;
        bye = 0;
        if((selection <= 5)&&(selection >= 1))
        {
            switch(selection)
            {
            case 1:
                SetSpeed();
                break;

            case 2:
                GetSpeed();
                break;

            case 3:
                GetMaxSpeed();
                break;

            case 4:
                GetMinSpeed();
                break;

            case 5:
                cout << "Good Bye" << endl;
                bye = -1;
                break;
            }
        }
        else
        {
            cout << "\nPlease input valid selection: " << endl;
            cin >> selection;
            switch(selection)
            {
            case 1:
                SetSpeed();
                break;

            case 2:
                GetSpeed();
                break;

            case 3:
                GetMaxSpeed();
                break;

            case 4:
                GetMinSpeed();
                break;

            case 5:
                cout << "Good Bye" << endl;
                bye = -1;
                break;
            }
        }
        if(bye == -1)
        {
            break;
        }

    }
}

int main()
{
    menu();

    return 0;


}//end of main function
4

2 に答える 2

0

これはあなたの目的に役立つかもしれません。あなたに合っていない場合は、要件に従って ask() を呼び出します。

#include <iostream>
#include <stdlib.h>

using namespace std;
char * title;
int a , b;
void menu();
void print(const char *c , int res )
{
    cout<<"\n\n\n\n\nThe "<<c<<" of "<<a<<" and "<<b<<" is : " <<res<<endl;
}
void add()
{
    print("Addition" , (a+b));
}

void sub()
{
    print("subtraction" , (a-b));
}

void mul()
{
    print("Multiplication" , (a*b));
}

void div()
{
    print("Division" , (a/b));
}
void ask()
{
    bool call_menu;
    char ch;
    cout<<"\n\n\n\n\n\n DO you Want to Continue? Y - N:  ";
    cin>>ch;
    if(ch=='Y' || ch=='y')
    {
        call_menu= true;
    } 
    else 
    {
        if(ch=='N' || ch == 'n')
        {
            call_menu= false;
        }
        else 
        {
            cin.clear();
            ask();
        }
    }
    if(call_menu)
    {
        system("clear"); // change this to system("cls") if on windows
        menu();
    }
    else
    {
        system("clear"); // change this to system("cls") if on windows
        cout<<"\n\n\n\n\n\n\n\t\t\tHave a Nice Day ! \n\n\n"<<endl;
    }
}
void input(int *first , int *second)
{
    system("clear"); // change this to system("cls") if on windows
    cout<<"\n\n\n\t\t\t\t Calculator \n\n\n\n"<<endl;
    cout<<"Enter the First Number : ";
    cin>>(*first);
    cout<<"\nEnter the Second Number :";
    cin>>(*second);
}
void menu()
{
    int ch;
    cout<<"\n\n\n\t\t\t\t Calculator \n\n\n\n"<<endl;
    cout<<"\n\n\t\t\t1 . Addition"<<endl;
    cout<<"\n\n\t\t\t2 . Subtract"<<endl;
    cout<<"\n\n\t\t\t3 . Multiply"<<endl;
    cout<<"\n\n\t\t\t4 . Division"<<endl;
    cout<<"\n\n\t\t\t5 . Exit" <<endl;
    cout<<"\n\n\n\n Enter Your Choice : ";
    cin>>ch;
    if(ch >=1 && ch <5){
    input(&a , &b);
    }
    switch(ch)
    {
        case 1:
        add();
        ask();
        break;
        case 2: 
        sub();
        ask();
        break;
        case 3:
        mul();
        ask();
        break;
        case 4:
        div();
        ask();
        break;
        case 5:
        exit(0);
        break;
        default:
        system("clear"); // change this to system("cls") if on windows
        cin.clear();
        cin.ignore();
        menu();
        break;
    }

}
int main(int argc, char **argv)
{
    menu();
    return 0;
}

必要に応じて変更します。

于 2013-07-03T21:19:21.370 に答える
0

あなたの質問のコードにはいくつかの問題があります。大きな問題は、いくつかの小さな調整で簡単に削除できる冗長なコードがたくさんあることです。いくつかの場所で選択に作用するメニュー印刷とコードの両方があります。これにより、継続プロセスの管理がさらに困難になります。冗長なコードを排除し、ロジックを調整するmainことmenuで、複雑さを軽減できるだけでなく、管理がはるかに簡単になります。

たとえばmenu、 while ループを削除し、ユーザーが終了するかどうかを示すブール値を返すように変更できます。これにより、オプションを選択して実行し、プログラムの他の部分がユーザーに続行するかどうかを尋ねる処理を返すことができます。

以下の例は、元のコードを変更したものです。ユーザーに続行を求めるロジックのみを扱い、冗長なメニュー コードを削除します。コード全体を確認し、必要に応じて追加の調整を行う必要があります。

#include <iostream>
#include <string>

using namespace std;
int sp;
int speed = 0;
int M, K, c, x;
const int MINspeed = 10;
const int MAXspeed = 40;

int GetSpeed()
{
    char c;

    while(true)
    {
        cout << "\nDo you want the speed in mph or km/h? \n" 
            << "\nEnter M or K followed by Enter: " << flush;
        cin >> c;

        if( (c != 'M')&& (c != 'K'))
        {
            cout << "Incorrect Selection. Try Again! \n\n" << flush;
            continue;
        }

        if ( c == 'M')
        {
            cout << "\nSpeed in mph: " << speed << endl;
            return speed;
        }
        else if(c == 'K')
        {
            double toKmPerHour = 1.61;
            double speedInKmPerHour = speed * toKmPerHour;
            cout << "\nSpeed in km/h:" << speedInKmPerHour << endl;
            return speed;
        }
    }

    return 0;
}

int GetMinSpeed()
{
    cout << "MIN speed = " << MINspeed << endl;
    return 0;
}

int GetMaxSpeed()
{
    cout << "MAX speed = " << MAXspeed << endl;
    return 0;
}

void SetSpeed()
{
    cout << "Input your speed: ";
    cin >> speed;
}

/* 
In this menu function, it will ask the user to input the selection, ranging from 1 to 5. 
If the user puts a number that is not between 1 to 5 or letters, then the program will 
ask the user to input a valid selection.

returns false if the user has selected the exit option
returns true for all other options
*/
bool menu()
{
    cout << "Selection Menu" << endl;
    cout << "--------------" << endl;
    cout << "\n1. Set Speed" << endl;
    cout << "2. Get Speed" << endl;
    cout << "3. Get MAX Speed" << endl;
    cout << "4. Get MIN Speed" << endl;
    cout << "5. Exit" << endl;

    int selection;
    cout << "\nYour selection :" <<endl;
    cin >> selection;

    switch(selection)
    {
    case 1:
        SetSpeed();
        break;

    case 2:
        GetSpeed();
        break;

    case 3:
        GetMaxSpeed();
        break;

    case 4:
        GetMinSpeed();
        break;

    case 5:
        cout << "Good Bye" << endl;
        return false;
        break;

    default:
        cout << "\nPlease input valid selection: " << endl;
    }

    return true;
}


int main()
{
    for(bool process = true; process;)
    {
        process = menu();
        if(process)
        {
            for(bool valid = false; !valid;)
            {
                cout << "\nDo you want to enter another selection? (Yes/No) " << flush;
                cin.clear();
                cin.ignore(numeric_limits<streamsize>::max(), '\n');

                string line;
                getline(cin, line);

                if(line == "No")
                {
                    valid = true;
                    process = false;
                }
                else if(line == "Yes")
                {
                    valid = true;
                }
                else
                {
                    cout << "\nInvalid input\n\n" << flush;
                }
            }
        }
    }

    return 0;
}//end of main function
于 2013-07-03T21:35:36.377 に答える