我一直在执行这个函数时遇到错误

时间:2015-11-05 17:20:04

标签: c++ turbo-c++ borland-c++ turbo-c borland-c

这里的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();
    }
}

1 个答案:

答案 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)