4
#include <iostream>
#include <strings.h>

using namespace std;

void encyclopedia()
{
int choice;
int choice2;

system("CLS");
cout << "Content Menu\n\n" 
     << "1. Gore\n\n"
     << "2. Wilson\n\n"
     << "3. Costa\n\n"
     << "Selection: ";
cin >> choice;
if (choice == 1)
{
           system("CLS");
           cout << "Al Gore's Book Summary of:\n\n"
                << "1. Introduction\n\n"
                << "2. \n\n"
                << "3. \n\n";
           cin >> choice2;
           if (choice2 == 1)
           {
                       system("CLS");
                      cout << "text here\n\n";
                      cout << "Press enter to continue\n";
                      cin.get();
                      encyclopedia();               
           }
           else if (choice2 == 2)
           {
                system("CLS");
                      cout << "text here\n\n";
                      cout << "Press enter to continue\n";
                      cin.get();
                      encyclopedia();               
           }
           else if (choice2 == 3)
           {
                system("CLS");
                      cout << "text here\n\n";
                      cout << "Press enter to continue\n";
                      cin.get();
                      encyclopedia();               
           }  
}
if (choice == 2)
{
           system("CLS");
           cout << "Wilson's Book Summary of:\n\n"
                << "1. Introduction\n\n"
                << "2. \n\n"
                << "3. \n\n";
           cin >> choice2;
           if (choice2 == 1)
           {
                       system("CLS");
                      cout << "text here\n\n";
                      cout << "Press enter to continue\n";
                      cin.get();
                      encyclopedia();               
           }
           else if (choice2 == 2)
           {
                system("CLS");
                      cout << "text here\n\n";
                      cout << "Press enter to continue\n";
                      cin.get();
                      encyclopedia();               
           }
           else if (choice2 == 3)
           {
                system("CLS");
                      cout << "text here\n\n";
                      cout << "Press enter to continue\n";
                      cin.get();
                      encyclopedia();               
           }  
}
if (choice == 3)
{
           system("CLS");
           cout << "Rebeca Costa's Book Summary of:\n\n"
                << "1. Introduction\n\n"
                << "2. \n\n"
                << "3. \n\n";
           cin >> choice;
           if (choice2 == 1)
           {
                       system("CLS");
                       cout << "text here\n\n";
                       cout << "Press enter to continue\n";
                       cin.get();
                       encyclopedia();               
           }
           else if (choice2 == 2)
           {
                       system("CLS");
                       cout << "text here\n\n";
                       cout << "Press enter to continue\n";
                       cin.get();
                       encyclopedia();               
           }
           else if (choice2 == 3)
           {
                      system("CLS");
                      cout << "text here\n\n";
                      cout << "Press enter to continue\n";
                      cin.get();
                      encyclopedia();               
           }  
}
}

int main()
{
cout << "2013 Written Task #2\n\nBy: Skye Leis\n\n";
cout << "Press enter to continue\n";
cin.get();
encyclopedia();   
}

最初の cin.get() が機能している間、encyclopedia() が機能する前に cin.get() を取得できません。実行すると、最初の画面が機能し、次にコンテンツ メニューが機能し、サブ メニューが機能しますが、実際のテキストを表示する部分では、エンサイクロペディア機能を再起動する前にエントリ キーを待機しません。

4

3 に答える 3

1

cinフォーマットされた入力で動作します。つまり、空白または改行が見つかるまで読み上げます。

問題はあなたがするときです

cin >> choice2;

数字を入力してエンターを押すと、cinまで読み上げられますblank space。つまり、newline(キーからenter) がまだそこにあります。その改行cin.get文字を読み上げて続行します。

さらに、スペースで区切られた 2 つの数値を入力すると、実装は 2 番目の数値を取得し、それを次のメニュー入力に使用します。

次のメニュー項目に進む前に、入力に残っているものを確実に読み取るには、次を使用できます。getline()

string garbage;
cin >> choice2;
getline(cin, garbage);  // The will take care of any extra inputs.
于 2013-04-04T16:36:37.730 に答える
0

最後の /n を読み取り、次のようにします。

cin.clear(); cin.get();

または単に cin.get(); と記述します。二回

于 2014-01-02T12:25:35.417 に答える
0

何が起こるかというと、まだ残り物 (エンドライン) があるため、ユーザー タイプの後に他の不要な文字を取得している可能性があるため、次を追加してみてください。

cin.ignore( numeric_limits <streamsize> ::max(), '\n' );

シンの後

于 2013-04-04T16:28:36.163 に答える