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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
usernet009
 Аватар для usernet009
24 / 24 / 1
Регистрация: 28.12.2009
Сообщений: 85
14.07.2010, 00:33     Проверка : нажал ли пользователь клавишу #1
Извиняюсь за тупой вопрос. Нужна функция которая проверяет, нажал ли пользователь какую то клавишу или нет. Знаю только наподобие getch() cin.get() cin.peek() но это не то.. если пользователь ничего не нажимал то функции ЖДУТ нажатия, а мне нужно чтоб цикл продолжался без остановок.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
14.07.2010, 01:49     Проверка : нажал ли пользователь клавишу #2
есть select() на лине, пример там в man'е про stdin
usernet009
 Аватар для 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
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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     Проверка : нажал ли пользователь клавишу
Ответ Создать тему
Опции темы

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