按任意键继续Linux C++

Syn*_*nia 2 c++ linux key cin any

我不确定在Linux中是否有任何不同,但我在网上发现这个:

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

应该足够了,#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();  
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想选择的选项是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;

}
Run Code Online (Sandbox Code Playgroud)

如果你想看到我的代码中的任何其他部分,请随时告诉我.

提前致谢.

Rei*_*ica 5

难道你不能使用cin.get()(获得一个字符)?

  • 我从未见过这种技术*不能使用. (4认同)

nin*_*alj 5

在*nix中,终端通常在向程序发送任何内容之前等待整行输入.这就是你发布的示例代码说的原因"Press Enter to Continue...";,然后丢弃所有内容直到下一个换行符.

为避免这种情况,您应该将终端设置为非规范模式,这可以使用POSIX termios(3)功能完成,如如何检查Linux中是否按下某个键中所述?.