Нажмите любую клавишу, чтобы продолжить в Linux C ++ - PullRequest
2 голосов
/ 23 октября 2011

Я не уверен, что присутствие в 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;

}

Если вы хотите увидеть любой другой фрагмент моего кода, не стесняйтесь сообщить мне.

Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 23 октября 2011

В * nix терминалы обычно ждут целую строку ввода, прежде чем отправлять что-либо в программу.Вот почему пример кода, который вы опубликовали, сказал "Press Enter to Continue...";, а затем отбросил все до следующего перехода на новую строку.

Чтобы избежать этого, вы должны перевести свой терминал в неканонический режим, что можно сделать с помощью POSIX.termios(3) функции, как описано в Как проверить, была ли нажата клавиша в Linux? .

5 голосов
/ 23 октября 2011

Не могли бы вы просто использовать cin.get() (получить один символ)?

1 голос
/ 24 декабря 2017

Вот фрагмент из моего кода.Работает как в Windows, так и в Linux.

#include <iostream>

using std::cout;
using std::cin;

// Clear and pause methods
#ifdef _WIN32
// For windows
void clearConsole() {
    system("cls");
}

void waitForAnyKey() {
    system("pause");
}
#elif __linux__
// For linux
void clearConsole() {
    system("clear");
}

void waitForAnyKey() {
    cout << "Press any key to continue...";
    system("read -s -N 1"); // Continues when pressed a key like windows
}

#endif

int main() {
    cout << "Hello World!\n";
    waitForAnyKey();
    clearConsole();
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...