1 / 1 / 1
Регистрация: 22.10.2017
Сообщений: 12
1

Выход по Esc из консоли в любой момент времени

22.10.2017, 01:05. Показов 1672. Ответов 6
Метки нет (Все метки)

Есть программа, которая принимает на вход символ, и если это буква, то выдаёт ее назад в нижнем и верхнем регистре. Не важно, как я это реализовал: пашет, и бог с ним. Смысл в другом: мне надо научить программу выходить в любой момент времени из консоли по нажатию клавиши Esc. представим, что это будет другая программа, представим, что там миллион циклов и операций, но где-то должно стоять единственное условие, что если консолька "слышит" нажатие определенной клавиши, она завершается.
Внизу представлена не рабочая реализация, т.к. while опрашивает на наличие "kbhit" только перед каждой новой итерацией. Если ты уже вошел внутрь цикла, и, скажем, висишь на cin >> a;, программа не слушает уже никакие нажатия "kbhit" и "getch" и условия не проверяет: она ждёт только ввода переменной a. Надо чтобы внутри цикла постоянно, в любой момент времени, опрашивалась клавиатура на нажатие клавиши Esc.

Просьба не кидать ссылки на рандомные темы по этому поводу, т.к. там проверяется только нажатие в определённый момент времени, а не в любой.

И прошу не корить меня, если я создал тему, потому что тупой и ничего не понимаю, и что-то, вероятно, делаю не так просто.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <iostream>
#include <conio.h>
#include <cstring>
#include <locale>
#include<windows.h>
 
using namespace std;
 
char a[0];
 
char b;
 
int main ()
{
             while (!_kbhit())
                if (_getch() == 27) exit(0);
    else
    {
 
 
                setlocale(LC_ALL, "rus");
 
                cout << "Ожидается ввод буквы: ";
 
                cin >> a;
 
                if (strlen(a)==1)
               {
                   if (isalpha(a[0]))
                    {
                        b=toupper (a[0]);
                        cout << endl << "Результат работы программы: " << a[0] << " " << b << endl << endl;
                    }
 
                    else
                    {
                        cout << endl << a << " - не буква!" << endl << endl;
                        return main();
                    }
                }
                else
                {
                    cout << endl << "Введите только один символ: букву английского алфавита." << endl << endl;
                    return main();
                }
    }
 
        return 0;
 
 
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.10.2017, 01:05
Ответы с готовыми решениями:

Как сделать выход из консоли по нажатию Esc?
как сделать выход из консоли по нажатию Esc?

Выход в любой момент выполнения программы
Всем привет! Надо сделать выход из программы написанной на Pascal в любой момент ее выполнения при...

Как организовать выход из циклической графической программы в любой момент ее выполнения?
Есть простая программа: Uses crt, Graph; Var Driver, Mode: Integer; Color: Word; x,y: Integer;...

Ноутбук зависает, в любой момент времени
Ноутбук зависает, случится может в любой момент, при загрузке, во время работы, даже просто без...

6
119 / 9 / 2
Регистрация: 06.09.2017
Сообщений: 82
22.10.2017, 01:27 2
Для "выхода в любой момент времени" есть Ctrl+C.
0
1 / 1 / 1
Регистрация: 22.10.2017
Сообщений: 12
22.10.2017, 01:34  [ТС] 3
Цитата Сообщение от animefan Посмотреть сообщение
Для "выхода в любой момент времени" есть Ctrl+C.
Спасибо! Только преподавателю я так не скажу.
0
3535 / 2095 / 388
Регистрация: 09.09.2017
Сообщений: 8,622
22.10.2017, 01:50 4
Запустить стороннюю программу через свою, отлавливать все нажатия, если не ESC передавать в стороннюю, если ESC - передать ей SIG_TERM.
C
1
2
3
4
5
6
7
#include <stdio.h>
int main(){
  int ch;
  while( (ch = getch()) != EOF ){
    if( ch != 27 ) putchar(ch); else {/* послать SIG_TERM */}
  }
}
Запускать как
$ ./a.out | ext_program
Примерно так. Наверняка есть ошибки, но суть, надеюсь, передал верно.
0
1 / 1 / 1
Регистрация: 22.10.2017
Сообщений: 12
22.10.2017, 02:01  [ТС] 5
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Запускать как
$ ./a.out | ext_program

Это для меня просто авада кедавра. (не понял ни черта). Да и всё остальное тоже не особо. Что за SIG_TERM?

Добавлено через 4 минуты
Может, просто пришло время осваивать фреймы и не париться с консолью?
0
119 / 9 / 2
Регистрация: 06.09.2017
Сообщений: 82
22.10.2017, 16:16 6
Цитата Сообщение от jooohny Посмотреть сообщение
Только преподавателю я так не скажу.
Почему?
0
ntlinuxnt
22.10.2017, 16:37     Выход по Esc из консоли в любой момент времени
  #7

Не по теме:

Цитата Сообщение от animefan Посмотреть сообщение
Почему?
Менталитет такой.

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.10.2017, 16:37

Установить паузу в работе скрипта в любой момент времени
Добрый день! У меня есть скрипт который выполняет обработку изображений. Скрипт в зависимости от...

Найти координаты брошенного тела в любой момент времени
Есть начальная координата тела (x, y, z), его масса и координата, куда тело будет брошено...

Как рассчитать точное местонахождение Плутона в любой момент времени
Добрый вечер. Сразу говорю в математике и физике не силен, но захотелось поставить себе такую...

Цикл: Выйти в любой момент времени из цикла while нажатием определённой кнопки. Как реализовать?
Необходимо выйти в любой момент времени из цикла while нажатием определённой кнопки. Как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru