如何使用循环显示菜单并重新提示输入?

时间:2012-01-14 20:41:09

标签: c++

我想要一个接受用户输入的菜单显示。但是,我希望用户能够返回菜单的开头重新选择选项。

while(end != 1) {
    display menu options
    prompt user for input
        if(input == x) {
            do this
        }
        else
            do that
}

然后,我希望它跳回到循环的开头并再次提出问题。如何在不在屏幕上创建菜单打印的无限循环的情况下执行此操作?

3 个答案:

答案 0 :(得分:1)

不幸的是,您并没有真正展示您正在使用的代码,而是展示了一些伪代码。因此,很难说出你实际上想要做什么。但是,从您对问题的描述和伪代码的怀疑来看,问题的根源在于您不会检查您的输入并且不会将流恢复到相当好的状态!要阅读菜单选项,您可能希望使用类似于此的代码:

int choice(0);
if (std::cin >> choice) {
    deal with the choice of the menu here
}
else if (std::cin.eof()) {
    // we failed because there is no further input: bail out!
    return;
}
else {
    std::string line;
    std::cin.clear();
    if (std::getline(std::cin, line)) {
         std::cout << "the line '" << line << "' couldn't be procssed (ignored)\n";
    }
    else {
        throw std::runtime_error("this place should never be reached! giving up");
    }
}

这只是输入基本上如何的粗略布局。它可能被封装到一个函数中(在这种情况下,你想要从一个闭合的输入中拯救出来的方式有所不同,可能使用异常或特殊的返回值)。他的主要部分是

  1. 使用std::isteam::clear()
  2. 将流恢复到良好状态
  3. 跳过错误的输入,在这种情况下使用带有std::getline()的{​​{1}};你也可以std::string行的其余部分
  4. 您的菜单可能还有其他问题,但没有看到具体的代码,我认为很难说具体问题是什么。

答案 1 :(得分:0)

考虑使用函数,而不是使用一段时间,因此您可以在需要的地方调用它:

void f()
{
  if(end != 1) {
      display menu options
      prompt user for input
          if(input == x) {
              do this
              f();
          }
          else{
              do that
              f();
          }
  }
}

答案 2 :(得分:0)

我不确定你要找的是什么,但这是一个粗略的菜单代码

 while(1){
cout<<"*******    Menu     ********\n";
cout<<"--      Selections Below       --\n\n";
cout<<"1) Choice 1\n";
cout<<"2) Choice 2\n";
cout<<"3) Choice 3\n";
cout<<"4) Choice 4\n";
cout<<"5) Exit\n";
cout<<"Enter your choice (1,2,3,4, or 5): ";

cin>>choice;
cin.ignore();

switch(choice){
    case 1 :
        // Code for whatever you need here
        break;

    case 2 :
        // Code for whatever you need here 
        break;

    case 3 :
        // Code for whatever you need here 
        break;

    case 4 :
        // Code for whatever you need here 
        break;

    case 5 :
        return 0;
        }