2

ここで mainopp() は、プログラムの主要なメニュー関数です。

1/2/3/4 以外の値を入力するたびに、エラー ダイアログが表示され、(getch() により) ch 入力が行われますが、戻って同じ関数を再実行する代わりに、どういうわけかスキップされます'cin>>c' が言及されている部分で、代わりに間違った出力でも無限ループに陥ります。メニューとエラーダイアログが奇妙な配置で表示されるだけです。clrscr()、メニュー、およびステートメントを繰り返し続けます。

delay() 関数を使用して、それがスキップされる行であることを確認しました。また、mainopp() の呼び出しを switch ケースの外に置いてみましたが、それもうまくいきませんでした。

次に、int c の代わりに char c を使用して実験し、switch case 関数のケースを単一引用符 (') で囲んだところ、意図したとおりに完全に機能することがわかりました。次に、 cin>>c 、 c=getch() 、 c=getche() を交互に実行したところ、すべて正しく動作することがわかりました。

私が得る唯一の問題は、char の代わりに c に int データ型を使用する場合です。intデータ型を使用するとエラーが発生する理由を誰か説明してもらえますか?

( agentinfo() 、 update() 、 credits() のプロトタイプは、上記の私のコードで言及されており、意図したとおりに完全に機能します。)

これは機能です:


void mainopp()
{
    int c;
    cout<<endl<<endl<<endl<<"\t \t \t \tTHE AGENCY";
    cout<<endl<<endl<<"\t \t \t    1.AGENT INFORMATION \n";
    cout<<"\t \t \t    2.UPDATE RECORDS \n";
    cout<<"\t \t \t    3.CREDITS \n";
    cout<<"\t \t \t    4.EXIT \n\n";
    cout<<"\t \t \t    Enter your choice: ";
    cin>>c;
    switch(c)
    {   case 1 :agentinfo();
            break;
        case 2 :update();
            break;
        case 3 :credits();
            break;
        case 4 :exit(1);
        default:cout<<"\t \t \tWrong selection !! Enter Again";
            getch();
            clrscr();
            mainopp();
    }
}
4

1 に答える 1

1

そのようにメインと呼ぶことは本当にできません...再帰エラーが発生します。これを試してください:

void mainopp()
{
int c;
bool Valid = false;
while(!Valid)
{
cout<<endl<<endl<<endl<<"\t \t \t \tTHE AGENCY";
cout<<endl<<endl<<"\t \t \t    1.AGENT INFORMATION \n";
cout<<"\t \t \t    2.UPDATE RECORDS \n";
cout<<"\t \t \t    3.CREDITS \n";
cout<<"\t \t \t    4.EXIT \n\n";
cout<<"\t \t \t    Enter your choice: ";
cin>>c;
Valid = true;
switch(c)
{   case 1 :agentinfo();
        break;
    case 2 :update();
        break;
    case 3 :credits();
        break;
    case 4 :exit(1);
    default:cout<<"\t \t \tWrong selection !! Enter Again";
        clrscr();
        Valid = false;
}
}
}

この例は、ユーザーが有効な選択肢を入力するまでループします。ユーザーが終了を選択するまで実行したい場合は、別の選択肢 (別のケース) を追加し、このオプションの bool を変更します。無限ループの場合は、単純にwhile(1).

于 2015-11-05T18:48:15.613 に答える