这里的mainopp()是程序的主要菜单功能。
每当我输入1/2/3/4以外的某个值时,它会显示错误对话框,接受ch输入(由于getch()) 但是后来它没有返回并重新运行相同的功能,而是以某种方式跳过了提到'cin>> c'的部分,而是进入了一个带有错误输出的无限循环。它只显示奇怪对齐的菜单和错误对话框。继续重复clrscr(),菜单和声明。
我确保使用delay()函数跳过这一行。 我也尝试过调用mainopp()在switch case之外,这也不起作用。
然后我尝试使用char c而不是int c,并将案例放在switch case函数中用单引号('),并发现它按预期完美地工作。 然后我在cin>> c,c = getch(),c = getche()之间交替,发现它都能正常工作。
我得到的唯一问题是当我使用int数据类型而不是char时。 任何人都可以解释为什么我使用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();
}
}
答案 0 :(得分: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)
。