带有选项的菜单列表

Posted

技术标签:

【中文标题】带有选项的菜单列表【英文标题】:Menu list with choices 【发布时间】:2018-04-25 12:48:29 【问题描述】:

我正在尝试在程序中创建一个选择列表,但现在我对用户输入错误输入时会发生什么感到困惑。

我试过用 do 循环来做这件事(我已经循环了 switch 语句)。另外,尝试将变量 key 设置为整数和字符,但两者都有问题。 Char 只需要一个字符,当你写多个字符时,它会自行检查每个字符。使用 int 输入错误时,我会得到 menu 函数的无限循环。

另外,我尝试在 *** 中使用 cin.fail(),我在这里找到了它,但没有成功。

void menu()

if(!isEmpty())

    showStack();

else

    cout << "stekas tuscias!" << endl;


cout << "---------------------------" << endl;
cout << "1. Iterpti i steka (push)" << endl;
cout << "2. Pasalinti is steko (pop)" << endl;
cout << "3. Issaugoti steka" << endl;
cout << "4. Issaugoti steka ir uzdaryti programa" << endl;
cout << "---------------------------" << endl;
cout << "Jusu pasirinkimas: ";

char key;
cin >> key;
switch(key)

    case '1':
    
        cout << "Irasykite reiksme i konsole: ";
        int data;
        cin >> data;
        cout << endl;
        push(data);
        break;
    
    case '2':
    
        cout << endl;
        pop();
        break;
    
    case '3':
    
        write();
        cout << "--------" << endl;
        cout << "Stekas issaugotas!" << endl;
        cout << "--------" << endl;
        menu();
        break;
    
    case '4':
    
        write();
        break;
    
    default:
    
        cout << "Tokio pasirinkimo nera!" << endl;
        cout << endl;
        key = '\0';
        menu();
        break;
    


如果需要,我的整个代码:https://pastebin.com/Xv1HE0Mh

【问题讨论】:

在任何情况下,使用循环而不是递归可能是一个好的开始。 递归的使用是非常的。非常非常糟糕的主意。 没关系:tailrec优化。 (是的,这是个笑话) 至于您的输入问题,如果您使用char(如代码所示),请记住char 的输入也将读取您按下@987654327 得到的换行符@ 钥匙。无限循环是因为如果输入错误,它不会从输入缓冲区中提取出来,你必须自己ignore,以及clear标志。 那么会发生什么?您是否设置了断点并单步执行并逐行查看为什么会发生一切? 【参考方案1】:

使用 try-catch-throw 块。使用 decltype 或 typeof 功能查看输入是否为整数。

【讨论】:

"decltype 或 typeof 功能来查看输入是否为整数">这怎么可能工作? @SeanBurton 不应该吗?不是 decltype,而是 is_same ::value 也许? 变量的类型在声明时是固定的,before cin用来读任何东西进去...【参考方案2】:

我确定为什么 cin.fail() 或 (!cin) 不适合您。但是,你可以这样做。而且,我也确定存在这种问题。

template <class T>
int check (T ch)

    if (ch >= 'a' && ch <= 'Z') return 0;
    else return 1;

然后。

main ()

.
.
char c;
cin.get (c); //Note here!!
if (check (c)) ...
else ... //You can use goto.
.

【讨论】:

以上是关于带有选项的菜单列表的主要内容,如果未能解决你的问题,请参考以下文章

带有动态 ajax url 选项的 ng2-select2

带有“全部”或“任何”选项的搜索组合框

Ionic 4 路由到带有选项卡的视图会触发整页重新加载

如何从表格的下拉菜单中删除先前选择的选项?

Android TabActivity 中的奇怪选项菜单行为

如何更改 MDI Tab 文档菜单中的顺序?