Я долго искал это в интернете. Есть ли способ, которым вы можете нажать любую клавишу, и она немедленно останавливает паузу и продолжает выполнение кода, но не отображает клавишу, которую вы нажали на экране (например, system («пауза»))?
Люди сказали cin.get()
и тому подобное, однако, если я использую это, я должен нажать любую клавишу, и она появится на экране, и вы должны нажать Enter после этого.
Поскольку вы ссылаетесь system("pause")
Я думаю, что вы используете Windows, то вы можете использовать _getch
ждать любую клавишу.
Иоахим Пилеборг уже упомянул _getch
как специфичный для Windows технический решение.
Тем не менее, это решение ищет проблему … потому что действительно нет проблем.
Чтобы увидеть последний вывод вашей консольной программы, вы можете использовать любой из этих методов:
Запустите программу из командная строка, например экземпляр стандартного интерпретатора команд Windows [cmd.exe].
Запустите программу из IDE, чтобы она остановилась в конце. Например. в Visual Studio просто используйте [Ctrl F5].
Запустите программу в отладчике, с точка остановки на закрытии }
из main
, Например. в Visual Studio добавьте эту точку останова и выполните нажатие клавиши [F5].
Особенно, когда вы попробуете первый пункт, вы заметите, что наличие _getch
или же system( "pause" )
или такой в конце программы, не имеет никаких преимуществ и может быть довольно раздражающим!
Я не знаю о Windows (где, видимо, _getch()
это путь), но в UNIX вы можете установить стандартный поток ввода (дескриптор файла 0
) в неканонический режим с использованием tcgetattr()
а также tcsetattr()
чтобы получить ключ немедленно. Чтобы подавить нажатия клавиш, вам также нужно отключить эхо:
termios old_tio, new_tio;
int rc = tcgetattr(0,&old_tio);
new_tio=old_tio;
new_tio.c_lflag &=(~ICANON & ~ECHO);
rc = tcsetattr(0,TCSANOW,&new_tio);
std::string value;
if (std::cin >> value) {
std::cout << "value='" << value << "'\n";
}
rc = tcsetattr(0,TCSANOW,&old_tio);
Этот код
ICANON
а также ECHO
флагиК сожалению, нет портативного способа справиться с этими настройками, т. Е. Вам придется прибегнуть к конкретному использованию платформы. я считать использование tcgetattr()
а также tcsetattr()
однако применимо к системам POSIX.