2012-01-14 4 views
0

ユーザー入力を受け付けるメニュー表示が必要です。しかし、私はオプションを再選択するためにメニューの先頭に戻ることができるようにしたい。ループを使用してメニューを表示し、入力を再入力するにはどうすればよいですか?

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

はその後、私はそれがループの最初にバックアップスキップして何度も何度も質問をお願いしたいと思います。どのように私は画面全体にメニュー印刷の無限ループを作成せずにこれを行う?

答えて

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::stringstd::getline()を使用して、不正な入力をスキップstd::isteam::clear()
  2. を使用して戻って良好な状態にストリームを復元します。 std::istream::ignore()行の残りの部分

メニューには他の問題があるかもしれませんが、具体的なコードは見当たりませんが、具体的な問題が何であるかは分かりません。

0

代わりの間を使用して、あなたがそれを必要な場所あなたはそれを呼び出すことができますので、この関数を使用して考えてみます。

void f() 
{ 
    if(end != 1) { 
     display menu options 
     prompt user for input 
      if(input == x) { 
       do this 
       f(); 
      } 
      else{ 
       do that 
       f(); 
      } 
    } 
} 
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; 
     } 
関連する問題