ここで 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();
}
}