2

这里 mainopp() 是我的程序的主要菜单功能。

每次我输入除 1/2/3/4 以外的某个值时,它都会显示错误对话框,接受一个 ch 输入(由于 getch()),但不是返回并重新运行相同的函数,而是以某种方式跳过提到“cin>>c”的部分,而是进入无限循环,甚至输出不正确。它只显示菜单和错误对话框,对齐方式很奇怪。不断重复 clrscr()、菜单和语句。

我确保这是使用 delay() 函数跳过的行。我还尝试将 mainopp() 的调用放在 switch case 之外,但这也不起作用。

然后我尝试使用 char c 而不是 int c,并将 case 放在单引号 (') 中的 switch case 函数中,发现它可以按预期完美运行。然后我在 cin>>c 、 c=getch() 、 c=getche() 之间交替,发现它们都正常工作。

我得到的唯一问题是当我对 c 使用 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();
    }
}
4

1 回答 1

1

你不能真的像那样称你为 main ......你会有一个递归错误。你应该试试这个:

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

这个例子将循环直到用户输入一个有效的选择。如果要运行它直到用户选择退出,请添加另一个选项(另一种情况)并更改此选项中的布尔值。对于无限循环,只需使用while(1).

于 2015-11-05T18:48:15.613 回答