1

以下は、VS2010 でコーディングされている私の VC++ コードの一部です。

do
{

    std:: cout << "\nOPTIONS:\n";
    std:: cout << "\n1. Get all session data.\n";
    std:: cout << "\n2. Get Nth session data\n";
    std:: cout << "\n3. Get Next session data\n";
    std:: cout << "\n4. Get Previous session data\n";
    std:: cout << "\n5. Get total no of sessions\n";
    std:: cout << "\n6. Exit\n";
    std:: cout << "\nEnter Your Option: ";

    std :: cin >> option;

    switch(int(option))
    {
         case 1:
            {
                data.ReadSetupFile();
                 break;
            }

        case 2:
            {
                break;
            }

        .....
        ......

        case 6:
            {

                std::cout<<"\nARE YOU SURE YOU WANT TO EXIT?(Press y for yes and any other character for no)\n";
                cin >> opt;
                break;
            }

        default:
            {
                std::cout << "\nINAVALID OPTION!!TRY AGAIN\n";
                break;
             }

    }

    std::cout<<"\nDO YOU WANT TO CONTINUE?(Press y for yes and any other character for no)\n";
    cin >> opt;

  }while(opt=='y');

ただし、 の値として整数の代わりに文字を挿入すると、optionを使用するまで終了せずにメニュー オプションが出力コンソールに出力され続けますctrl+c。このブレーク戦略を使用すると、次のようなメッセージが表示されます。

First-chance exception at 0x75936da7 in SetupAPIReader.exe: 0x40010005: Control-C.

実行が終了しないのはなぜですか?

4

1 に答える 1

0

指定された入力が期待されるタイプでない場合、failbitofcinが設定されます。このビットをチェックしてクリアすると、値が変数の初期値にリセットされます。

if(!cin)
    {
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
于 2014-09-22T11:25:39.577 に答える