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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
usernet009
24 / 24 / 1
Регистрация: 28.12.2009
Сообщений: 85
#1

Проверка : нажал ли пользователь клавишу - C++

14.07.2010, 00:33. Просмотров 1733. Ответов 3
Метки нет (Все метки)

Извиняюсь за тупой вопрос. Нужна функция которая проверяет, нажал ли пользователь какую то клавишу или нет. Знаю только наподобие getch() cin.get() cin.peek() но это не то.. если пользователь ничего не нажимал то функции ЖДУТ нажатия, а мне нужно чтоб цикл продолжался без остановок.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2010, 00:33     Проверка : нажал ли пользователь клавишу
Посмотрите здесь:

Открытие файла по нажатию на клавишу C++
C++ Условие на клавишу
C++ Подменить нажатую клавишу
Проверка, ввел ли пользователь что-нибудь на клавиатуре? C++
как сделать что бы когда нажал выбор кокого нить пункта, а он выделялся и с помощью Enter я подтверждаю что выбираю C++
посчитать количество буковок(5,10,20) которых я нажал и записать в файл суму нажатий.. C++
Добавить горячую клавишу C++
Как назначить клавишу на действие C++
C++ Как в switch обработать клавишу Esc?
Конвертировать клавишу в VK_KEY C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
14.07.2010, 01:49     Проверка : нажал ли пользователь клавишу #2
есть select() на лине, пример там в man'е про stdin
usernet009
24 / 24 / 1
Регистрация: 28.12.2009
Сообщений: 85
14.07.2010, 01:53  [ТС]     Проверка : нажал ли пользователь клавишу #3
Оо... спасибо, буквально минуту назад нашел подходящую.
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
KBHIT
            
               #include <conio.h>     /* требуется только для объявления функции */
               int kbhit();
               
               /* Описание.
            
               Функция kbhit проверяет нажатие клавиши на консоли.
            
               Возвращаемое значение.
            
         
               Функция  kbhit  возвращает ненулевое значение, если клавиша
         нажата. В противном случае возвращается 0.
            
               Пример: */
           
               #include <conio.h>
               int result;
               /* следующий оператор проверяет, была ли нажата клавиша */
            result = kbhit();
               /* если результат result ненулевой, буфер  ожидает  нажатие
         клавиши.  Ее можно задать при помощи getch или getche. Если getch
         или getche были вызваны функцией kbhit  без  проверки,  программа
         делает паузу и ожидает ввод символа. */
easybudda
Эксперт С++
9439 / 5462 / 925
Регистрация: 25.07.2009
Сообщений: 10,481
14.07.2010, 02:34     Проверка : нажал ли пользователь клавишу #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
usernet009, немного не по теме, но для разнообразия: програмка для *NIX ждёт пользовательского ввода 10 секунд, если ввода небыло, выдаёт сообщение и ждёт ещё 10 секунд. Если ввод был, выводит его и снова ждёт, если только quit не ввести... Ввод заканчивается клавишей enter, если это не желательно, прийдётся пошаманить немного - был уже похожий пример на форуме...
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
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
 
#define TIMEOUT 10
 
int main(void){
    char buf[BUFSIZ], * p;
    struct timeval tv;
    fd_set readfds;
    int ret, len;
 
    while ( 1 ){
        FD_ZERO(&readfds);
        FD_SET(STDIN_FILENO, &readfds);
        tv.tv_sec = TIMEOUT;
        tv.tv_usec = 0;
 
        ret = select(STDIN_FILENO + 1, &readfds, NULL, NULL, &tv);
 
        if ( ret == -1 ){
            perror("select");
            exit(EXIT_FAILURE);
        }
        else if ( ! ret ){
            printf("No user input after %d seconds\n", TIMEOUT);
            continue;
        }
 
        if ( FD_ISSET(STDIN_FILENO, &readfds) ){
            len = read(STDIN_FILENO, buf, BUFSIZ - 1);
            if ( len == -1 ){
                perror("read");
                exit(EXIT_FAILURE);
            }
            buf[len] = '\0';
            if ( p = strrchr(buf, '\n') )
                *p = '\0';
            printf("User input: %s\n", buf);
            if ( ! strcmp(buf, "quit") )
                break;
        }
    }
 
    exit(EXIT_SUCCESS);
}
Проверка : нажал ли пользователь клавишу
Yandex
Объявления
14.07.2010, 02:34     Проверка : нажал ли пользователь клавишу
Ответ Создать тему
Опции темы

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