Информатика 12 практическая. ctrl c

Итак, у многих кто сдавал 12 практическую или слышал о ней, возникал вопрос насчет решения проблемы с проверкой ctrl c, ctrl z. Для тех кто не в курсе вкратце опишу ситуацию, преподаватель вводит в консоль комбинацию клавиш ctrl c и нажимает enter…BOOM все ломается.
Не хочу тянуть время и толкать длинные речи так, что просто покажу решение проблемы.
Вариант решения на языке С++:
Шаг 1.
Подключаем библиотеку в начале программы: #include <windows.h>
Шаг 2.
Пишем строчку в функции int main():
SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), ~ENABLE_PROCESSED_INPUT);
У меня она, например, идет первой строкой в функции main().
Шаг 3.
Ву-аля, все работает. CTRL C → Enter(если после первого ентра ничего не произошло, нажмите второй раз) → Сообщение пропадает, пользователь вводит новое верное значение(если у вас значения проверяются в цикле).
Точно также все работает и для CTRL Z.
UPD:
Второй способ для решения проблемы. Отличия: не ломается каретка ввода, но требуется запуск программы без отладки. Вместо строчки в Шаге 2, используем SetConsoleCtrlHandler(NULL, TRUE); , библиотека та же.
Запуск без отладки в Visual Studio - рисунок ниже:
image
UPD 2.0
Также добавили решение для Python.
Шаг 1.
Перед основным кодом нужно вставить стандартную конструкцию try:. А после кода закончить это except KeyboardInterrupt:.
Пример как это будет выглядеть:

try: 
ᅠ #Весь ваш код
except KeyboardInterrupt:
ᅠ print("Error")
7 Likes

Также, забыл сказать. Рекомендую использовать *cin.clear()*, после каждого вашего cin’a

2 Likes

Python3

Или можно через pip поставить модуль keyboard и в проге сделать:

keyboard.block_key(“ctrl”) # блокируем клавишу ctrl
keyboard.block_key(“alt”) # блокируем клавишу alt

2 Likes