Есть ли способ сделать паузу, как в системе («пауза»)?

Я долго искал это в интернете. Есть ли способ, которым вы можете нажать любую клавишу, и она немедленно останавливает паузу и продолжает выполнение кода, но не отображает клавишу, которую вы нажали на экране (например, system («пауза»))?

Люди сказали cin.get() и тому подобное, однако, если я использую это, я должен нажать любую клавишу, и она появится на экране, и вы должны нажать Enter после этого.

4

Решение

Поскольку вы ссылаетесь system("pause") Я думаю, что вы используете Windows, то вы можете использовать _getch ждать любую клавишу.

4

Другие решения

Иоахим Пилеборг уже упомянул _getch как специфичный для Windows технический решение.

Тем не менее, это решение ищет проблему … потому что действительно нет проблем.

Чтобы увидеть последний вывод вашей консольной программы, вы можете использовать любой из этих методов:

  • Запустите программу из командная строка, например экземпляр стандартного интерпретатора команд Windows [cmd.exe].

  • Запустите программу из IDE, чтобы она остановилась в конце. Например. в Visual Studio просто используйте [Ctrl F5].

  • Запустите программу в отладчике, с точка остановки на закрытии } из main, Например. в Visual Studio добавьте эту точку останова и выполните нажатие клавиши [F5].

Особенно, когда вы попробуете первый пункт, вы заметите, что наличие _getch или же system( "pause" ) или такой в ​​конце программы, не имеет никаких преимуществ и может быть довольно раздражающим!

2

Я не знаю о 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);

Этот код

  1. сначала получает текущее состояние флагов терминала
  2. очищает ICANON а также ECHO флаги
  3. читать скрытый ввод (в данном случае строку, но это может быть и отдельный ключ)
  4. восстанавливает исходные настройки

К сожалению, нет портативного способа справиться с этими настройками, т. Е. Вам придется прибегнуть к конкретному использованию платформы. я считать использование tcgetattr() а также tcsetattr() однако применимо к системам POSIX.

1
По вопросам рекламы [email protected]