Форум программистов, компьютерный форум CyberForum.ru

Нажатие определенной клавиши на клавиатуре = Запуск определенной функции - C++

Восстановить пароль Регистрация
 
Argentum21
1 / 1 / 0
Регистрация: 05.03.2014
Сообщений: 75
16.05.2014, 09:03     Нажатие определенной клавиши на клавиатуре = Запуск определенной функции #1
Здравствуйте.
У меня такой вопрос: как при нажатии, к примеру, клавиши "1" на клавиатуре запустить нужную мне функцию (Окно с меню работает в графическом режиме.) ?

Вот код меню:
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
int main ()
{ int menu1;
char d = '\0';
do
{
initwindow (800, 600);
settextstyle (0, 0, 32); //0 0 4
setcolor (3);
outtextxy (250, 100, "ÐÀÑÏÈÑÀÍÈÅ");
setcolor (10);
setlinestyle (0, 0, 5);
circle (175, 185, 30);
outtextxy (160, 170, "1");
outtextxy (220, 170, "Ââîä Г¤Г*Г*Г*ûõ");
setcolor (2);
circle (175, 250, 30);
outtextxy (159, 235, "2");
outtextxy (220, 235, "ÑïðГ*ГўГЄГ*");
circle (175, 315, 30);
outtextxy (159, 300, "3");
outtextxy (220, 300, "Âûõîä!");
getch ();
if (d=='3') break;
fflush(stdin);
scanf ("%d", &menu1);
switch (menu1)
{ case 1: input (); break;
  case 2: inf (); break;
}
}
while (menu1!=3);
closegraph ();
}
Подскажите, пожалуйста. Заранее огромное спасибо!

Добавлено через 1 минуту
На данный момент при запуске программы у меня выходят два окна: графическое с меню и текстовое для ввода. Так вот, нужно, чтобы текстового окна не было, а было лишь окно с меню.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2014, 09:03     Нажатие определенной клавиши на клавиатуре = Запуск определенной функции
Посмотрите здесь:

Вывод цвета при нажатии определенной клавиши C++
Как в элементе управления CListCtrl поймать нажатие определенной клавиши на элементе? C++
C++ Выход из цикла по нажатию определенной клавиши
Посещение потоком определенной функции C++
Воспроизведение звука системным динамиком при нажатии определенной клавиши C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TenGen
Будущее рядом
 Аватар для TenGen
96 / 94 / 20
Регистрация: 06.03.2014
Сообщений: 342
16.05.2014, 09:55     Нажатие определенной клавиши на клавиатуре = Запуск определенной функции #2
Argentum21, это вам нужно, насколько я понял, сделать обработчик события нажатия клавиш на клавиатуре. Что бы при нажатии клавиши он срабатывал, определял, какая именно клавиша нажата, и вызывал определенную функцию. Через if'ы
Argentum21
1 / 1 / 0
Регистрация: 05.03.2014
Сообщений: 75
16.05.2014, 10:30  [ТС]     Нажатие определенной клавиши на клавиатуре = Запуск определенной функции #3
Не могли бы Вы показать пример на моей программе?
Mikhail1990
9 / 9 / 1
Регистрация: 22.03.2014
Сообщений: 155
16.05.2014, 11:49     Нажатие определенной клавиши на клавиатуре = Запуск определенной функции #4
Вот этот кусочек поможет вам
вставить вместо ввода (cin) или что там у вас
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int key=0;                            //переменная для хранения ввода  с клавиатуры
    
    if(_kbhit())                 //проверяет нажата ли клавиша
    {
        key=_getch();              //просит нажать клавишу
 
        switch (key)                 //дальше идет проверка, код 49-52 это 1-4 клавиши на клавиатуре
        {
        case 49:                        // то вызываем
            ФУНКЦИЯ ТАКАЯ;
            break;
        case 50:                        // то вызываем
            ФУНКЦИЯ ТАКАЯ;
            break;
        case 51:                        // то вызываем
            ФУНКЦИЯ ТАКАЯ;
            break;
        case 52:                        // то вызываем
            ФУНКЦИЯ ТАКАЯ;
            break;
        }
    }
Argentum21
1 / 1 / 0
Регистрация: 05.03.2014
Сообщений: 75
16.05.2014, 17:25  [ТС]     Нажатие определенной клавиши на клавиатуре = Запуск определенной функции #5
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
int main ()
{  
    int key;
     int menu1;
char d = '\0';
do
{
initwindow (800, 600);
settextstyle (0, 0, 32); //0 0 4
setcolor (3);
outtextxy (250, 100, "Raspisanie");
setcolor (10);
setlinestyle (0, 0, 5);
circle (175, 185, 30);
outtextxy (160, 170, "1");
outtextxy (220, 170, "Vvod dannyh");
setcolor (2);
circle (175, 250, 30);
outtextxy (159, 235, "2");
outtextxy (220, 235, "Spravka");
circle (175, 315, 30);
outtextxy (159, 300, "3");
outtextxy (220, 300, "Exit!");
getch ();
if (d=='3') break;
fflush(stdin);
 
if (_kbhit())
      {
                   key=_getch();
                   switch (key)
                   {
                          case 49:
                               input (); break;
                          case 50:
                               inf (); break;
                   }
                   }  
}                     
while (menu1!=3);
closegraph ();
}
Я переделала, но все равно не работает так как нужно...
TenGen
Будущее рядом
 Аватар для TenGen
96 / 94 / 20
Регистрация: 06.03.2014
Сообщений: 342
16.05.2014, 17:27     Нажатие определенной клавиши на клавиатуре = Запуск определенной функции #6
Argentum21, а что не так?
Mikhail1990
9 / 9 / 1
Регистрация: 22.03.2014
Сообщений: 155
16.05.2014, 17:31     Нажатие определенной клавиши на клавиатуре = Запуск определенной функции #7
я так понял оно проскакивает не дожидаясь ввода? верно?
Argentum21
1 / 1 / 0
Регистрация: 05.03.2014
Сообщений: 75
16.05.2014, 17:32  [ТС]     Нажатие определенной клавиши на клавиатуре = Запуск определенной функции #8
Mikhail1990, При нажатии на клавишу , к примеру, 1, окно просто закрывается
Mikhail1990
9 / 9 / 1
Регистрация: 22.03.2014
Сообщений: 155
16.05.2014, 17:35     Нажатие определенной клавиши на клавиатуре = Запуск определенной функции #9
было бы хорошо весь код посмотреть!
Argentum21
1 / 1 / 0
Регистрация: 05.03.2014
Сообщений: 75
16.05.2014, 17:36  [ТС]     Нажатие определенной клавиши на клавиатуре = Запуск определенной функции #10
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
#include <stdio.h>
#include <conio.h> 
#include <string.h>
#include <math.h>
#include <dos.h>
#include <graphics.h>
 
 
struct diciplina
{
       char name_predmet[20];
       int lec, sem, lab;
};
 
 
struct prepodavatel 
{
       diciplina predmet;
       char FIO[25];
};
       
 
struct auditoria
{
       int nomer_audit[2];
       int id[3]; //èäåГ*ГІГЁГґГЁГЄГ*òîð: 0 - ëåêöèÿ, 1- ñåìèГ*Г*Г°, 3- Г«Г*áîðГ*òîðГ*Г*Гї
};
 
struct group
{
       int n_gr;
       int n_podgruppy; //max - 2 podgruppy: 1 and 2
};                    
 
 
 
void input ()
{
     diciplina dic;
     prepodavatel pr;
     auditoria audit;
     group gr;
char filename[100];
int vsego_audit=0;
printf ("\nViberite deystvie\n");
printf ("\n1). Sozdat` file\n");
printf ("\n2). Otkrit` file\n");
fflush (stdin);
char d=getche ();
FILE *F;
if (d=='1')
{
printf ("\nVvedite imya dlya novogo faila\n");
gets (filename);
F=fopen (filename, "wb+");
}
if (d=='2')
{
printf ("\nVvedite imya faila\n");
gets (filename);
F=fopen (filename, "rb+");
if (F)
printf ("\nFile sushestvuet!\n");
else
{ printf ("File ne sushestvuet!\n");
printf ("\nViberite deistvye:\n");
printf ("\n1). Sozdat file\n");
printf ("\n2). Vyhod!\n");
d=getche ();
if (d=='1')
{
printf ("\nVvedite imya dlya novogo faila\n");
gets (filename);
F=fopen (filename, "wb+");
}
if (d=='2')
return;
}
}
{
do
{ fflush (stdin);
printf ("\nVyberute deistvie: \n");
printf ("\n1). Dobavit dannye\n");
printf ("\n2). Posmotret` dannye\n");
printf ("\n3). Sozdat file zanovo \n");
printf ("\n4). Vyhod!");
d=getche ();
if (d=='4') break;
if (d=='3')
{
printf ("\nVvedite imy dly novogo faila\n");
gets (filename);
F=fopen (filename, "wb+");
}
if (d=='1')
{
F=fopen (filename, "ab+");
do
 { fflush (stdin);
  printf ("Vvedite FIO prepodavatelya, provod. zanyatiye: \n");
  gets (pr.FIO);
  printf ("\n Vvedite naim.discipliny: \n");
  gets (dic.name_predmet);
  printf ("\n Vvedite kol-vo lekciy po etoy discipline: \n");
  scanf ("%d", &dic.lec);
  printf ("Vvedite kol-vo seminar. zanyatiy po etoy discipline: \n");
  scanf ("%d",&dic.sem);
  printf ("Vvedite kol-vo lab.rabot po etoy discipline: \n");
  scanf ("%d", &dic.lab);
  printf ("Vvedite nomera vozmozhnyh auditoriy dlya dannogo zanyatiya: \n");
  for (int i=0; i<2; i++)
  scanf ("%d", &audit.nomer_audit[i]);
  fwrite (&pr, sizeof(pr), 1, F);
  fwrite (&audit, sizeof(audit), 1, F);
  fwrite (&dic,sizeof(dic), 1, F);
  printf ("\nProdolzat' vvod: [D/H]\n");
  fflush (stdin);
  d=getche ();
 }
 while (d=='D' || d=='d');
 fclose (F);
}
}
while (d!=1 || d!=2 || d!=3);
}
}
 
 
 
 
 
 
void inf ()
{    initwindow (800, 600);
     setcolor (4);
     outtextxy (0, 0, "Nazvanie programmy: Raspisanie zanyatiy. Chtoby posmotret optimalnoe raspisanie, nazhmite 1.");
}     
      
 
int main ()
{  
    int key;
     int menu1;
char d = '\0';
do
{
initwindow (800, 600);
settextstyle (0, 0, 32); //0 0 4
setcolor (3);
outtextxy (250, 100, "Raspisanie");
setcolor (10);
setlinestyle (0, 0, 5);
circle (175, 185, 30);
outtextxy (160, 170, "1");
outtextxy (220, 170, "Vvod dannyh");
setcolor (2);
circle (175, 250, 30);
outtextxy (159, 235, "2");
outtextxy (220, 235, "Spravka");
circle (175, 315, 30);
outtextxy (159, 300, "3");
outtextxy (220, 300, "Exit!");
getch ();
if (d=='3') break;
fflush(stdin);
 
if (_kbhit())
      {
                   key=_getch();
                   switch (key)
                   {
                          case 49:
                               input (); break;
                          case 50:
                               inf (); break;
                   }
                   }  
}                     
while (menu1!=3);
closegraph ();
}
Mikhail1990
9 / 9 / 1
Регистрация: 22.03.2014
Сообщений: 155
16.05.2014, 17:49     Нажатие определенной клавиши на клавиатуре = Запуск определенной функции #11
поменяйте if (!kbhit())
Argentum21
1 / 1 / 0
Регистрация: 05.03.2014
Сообщений: 75
16.05.2014, 18:07  [ТС]     Нажатие определенной клавиши на клавиатуре = Запуск определенной функции #12
Mikhail1990, Теперь он совсем не реагирует на нажатие клавиш. Никаких
Mikhail1990
9 / 9 / 1
Регистрация: 22.03.2014
Сообщений: 155
16.05.2014, 18:11     Нажатие определенной клавиши на клавиатуре = Запуск определенной функции #13
если оставить вот так
C++
1
2
3
4
5
6
7
8
9
key=_getch();
                   switch (key)
                   {
                          case 49:
                               input (); break;
                          case 50:
                               inf (); break;
                   }
                   }
Argentum21
1 / 1 / 0
Регистрация: 05.03.2014
Сообщений: 75
16.05.2014, 18:14  [ТС]     Нажатие определенной клавиши на клавиатуре = Запуск определенной функции #14
Mikhail1990, Нет, это ничего не меняет.
По-прежнему выскакивают два окна и работает как и ранее было - только когда нужные цифры в окне для текста пишу.
Но нужно, чтобы при запуске было всего одно окно - то, что с графикой и, нажимая на клавишу клавиатуры, запускалось действие, описанное в функции...
Mikhail1990
9 / 9 / 1
Регистрация: 22.03.2014
Сообщений: 155
16.05.2014, 18:17     Нажатие определенной клавиши на клавиатуре = Запуск определенной функции #15
Первоначальная проблема была с автовводом.
Соррян, по окнам ничего не могу подсказать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2014, 18:18     Нажатие определенной клавиши на клавиатуре = Запуск определенной функции
Еще ссылки по теме:

C++ Запрет нажатия определенной клавиши в консольном приложении (Visual Studio) W8
Запуск программ по определенной схеме с использованием Fiber и Thread C++
C++ Выход из цикла после нажатия определенной клавиши

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

Или воспользуйтесь поиском по форуму:
Argentum21
1 / 1 / 0
Регистрация: 05.03.2014
Сообщений: 75
16.05.2014, 18:18  [ТС]     Нажатие определенной клавиши на клавиатуре = Запуск определенной функции #16
Не подскажите, почему это не работает как нужно?
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
int main ()
{  
    int key;
initwindow (800, 600);
settextstyle (0, 0, 32); //0 0 4
setcolor (3);
outtextxy (250, 100, "Raspisanie");
setcolor (10);
setlinestyle (0, 0, 5);
circle (175, 185, 30);
outtextxy (160, 170, "1");
outtextxy (220, 170, "Vvod dannyh");
setcolor (2);
circle (175, 250, 30);
outtextxy (159, 235, "2");
outtextxy (220, 235, "Spravka");
circle (175, 315, 30);
outtextxy (159, 300, "3");
outtextxy (220, 300, "Exit!");
getch ();
fflush(stdin);
 
                   key=_getch();
                   switch (key)
                   {
                          case 49:
                               input (); break;
                          case 50:
                               inf (); break;
                   }
                    
 
closegraph ();
}
Yandex
Объявления
16.05.2014, 18:18     Нажатие определенной клавиши на клавиатуре = Запуск определенной функции
Ответ Создать тему
Опции темы

Текущее время: 08:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru