c++ - void operator usage for calling menu

标签 c++

所以我有这部分代码并且我有这些错误,而不是发布我如何修复它们。谢谢你的帮助..

void DisplayMenu()
{
    cout <<"Please choose from the following options :\n\n"
         <<"1-al.\n"
         <<"2-c.\n"
         <<"3-v.\n\n"
         <<"Or I want to see first :\n"
         <<"------------------------\n\n"
         <<"4-r.\n"
         <<"5-m.\n"
         <<"6-k.\n"
         <<"7-d.\n"
         <<"8-u.\n\n"
         <<"Or :\n"
         <<"----\n\n"
         <<"9-I changed my mind and would like to exit.\n\n";
}

int ChooseFromMenu()
{
    int A =0 ;
    while ((DisplayMenu() && !(cin >> A ) || (cin.good() && (A < 1 || A > 9))) {
    cout << "\nInvalid input!\n"<<endl;
    cin.clear();
    cin.ignore(1000, '\n');
    }
    return A;
}

这是我的错误列表

3   IntelliSense: expected a statement  
2   IntelliSense: expected a ')'  
Error   1   error C4716: 'DisplayMenu' : must return a value

最佳答案

如果你真的想使用DisplayMenu在while循环的条件下,需要使用逗号运算符:

int ChooseFromMenu()
{
    int A =0 ;
    while (DisplayMenu(), (!(cin >> A ) || (cin.good() && (A < 1 || A > 9))) {
        cout << "\nInvalid input!\n"<<endl;
        cin.clear();
        cin.ignore(1000, '\n');

    }
    return A;
 }

这将调用 DisplayMenu ,扔掉(不存在的)返回值,然后评估实际情况。然而,就我个人而言,我会使用内部有条件中断的无限循环:

int ChooseFromMenu()
{
    int A =0;
    while (true) {
        DisplayMenu();
        if ((cin >> A)) {
            if (!cin.good() || (1 <= A && A <= 9)) {
                return A;
            }
        }
        cout << "\nInvalid input!\n"<<endl;
        cin.clear();
        cin.ignore(1000, '\n');
    }
}

我已将条件拆分为两个嵌入式 if这是因为我发现它比 && 的组合更容易阅读和 || . (我也喜欢在组合多重比较时总是使用 <<= - 我发现它更容易阅读。)

关于c++ - void operator usage for calling menu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44000303/

相关文章:

c++ - opengl-es 二维绘图库

c++ - 在 C++ 中,如果我引用一个带有释放析构函数 ~MyClass 的对象,超出范围的引用会调用析构函数吗?

c++ - 分割字符数组

c++ - 这段代码是否滥用了 STL 的 find_if?

c++ - 与 c++ 中原型(prototype)模式的示例解释混淆

c++ - Qt 为某些应用程序数据指定位置

c++ - 使用 friend 类 C++14 重新定义为不同类型的符号

c++ - 如何将 boost::bind 对象存储为成员变量?

c++ - 在 Eclipse Juno ADT 中启用 C++11 符号解析

c++ - c++程序崩溃时会自动释放内存吗?