2

Linux を使用している場合に違いが生じるかどうかはわかりませんが、オンラインで次のことがわかりました。

    cout << "Press Enter to Continue...";
    cin.ignore(numeric_limits<streamsize>::max(),'\n');

#include<limits>もちろん、ヘッダーで十分なはずです。

ただし、私のプログラムでは機能しないようです。

コンパイルして実行しますが、待機しません。

基本的に、画面に人のリストを表示するためのメソッド呼び出しにつながるメニューがあります。システムがメニューに戻る前に、そのリストを一時停止したいと思います。

メニューからの私のコードは次のとおりです。

//Manager's Menu
void SelectionPage::showManagerMenu(){
    char option;
    while(true)
    {
        system("clear");                                                //Clears the terminal
        cout<<"             Flat Manager's Menu"<<endl<<endl;           //Display manager's menu
        cout << "Select Manager option" << endl;
        cout << "a) Add a new Flat Member" << endl;
        cout << "b) Delete an existing Flat Member" << endl;
        cout << "c) List Flat Members" << endl;
        cout << "d) Duties" <<endl;
        cout << "e) Resources" <<endl;
        cout << "f) Reset System" <<endl;
        cout << "q) Exit" << endl;
        cout << "make selection: ";
        cin >> option;

        switch(option) {                                                //Takes the user to the corresponding menu or method
            case 'a':   system("clear");
                        memberList.addNewFlatMember(points);
                    break;
            case 'b':   system("clear");
                        memberList.deleteFlatMember();
                    break;
            case 'c':   system("clear");
                        memberList.listFlatMembers();
                    break;
            case 'd':   system("clear");
                        showDutiesMenu();
                    break;
            case 'e':   system("clear");
                        showResourcesMenu();
                    break;
            case 'f':   //reset();
                    break;
            case 'q':   exit(0);
            default:    cout << "Option not recognised: " << option << endl;
                        showManagerMenu();  
        }
    }
}

私が選択したいオプションは c) で、次のようになります。

//Show the current flat population
void MemberManagement::listFlatMembers(){
    cout<<"             Member List"<<endl<<endl;

    importFlatMembers();                                                //get flat member info from file

    for( int count = 0; count<flatMemberList.size(); count++){
        cout << count+1<<". "<<flatMemberList[count].getName() << endl;
    }

    cout << "Press any key to Continue...";
    cin.ignore(numeric_limits<streamsize>::max(),'\n');

    return;

}

私のコードの他の部分を見たい場合は、遠慮なくお知らせください。

前もって感謝します。

4

3 に答える 3

6

cin.get()(1文字を取得する)だけを使用できませんでしたか?

于 2011-10-22T21:05:19.603 に答える
5

*nix では、端末は通常、プログラムに何かを送信する前に、入力の行全体を待ちます。これが、投稿したサンプルコードが と言っ"Press Enter to Continue...";て、次の改行まですべてを破棄した理由です。

これを避けるには、Linux でキーが押されたかどうかを確認する方法で説明されているように、端末を非標準モードにする必要があります。これは POSIXtermios(3)関数を使用して実行できます。.

于 2011-10-22T21:51:23.257 に答える