Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
art1535
7 / 7 / 3
Регистрация: 19.02.2013
Сообщений: 76
1

Как выйти из цикла при нажатии клавиши ESC

08.04.2013, 22:56. Просмотров 1496. Ответов 7
Метки нет (Все метки)

Доброго времени дня. Поясните, как выйти из цикла при нажатии клавиши ESC

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void GetStr()
{
    char *array_str[MAXSTR];
    char str[MAXBUF];
    int i;
 
    for( i = NULL; i < 7 ; i++ ) {
        if( kbhit() == 0x011B )
            break;
        gets( str );
        array_str[i] = str;
        puts( array_str[0] );
    }
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2013, 22:56
Ответы с готовыми решениями:

При нажатии клавиши «I» проверить и вывести состояние клавиши insert
Написать программу : при нажатии клавиши «I» проверить и вывести состояние клавиши insert ...

Завершение программы при нажатии кнопки Esc (для XCode)
Здравствуйте! Такой вопрос: как в Xcode написать программу, которая завершается при нажатии кнопки...

Как сделать выход из цикла While при нажатии клавиш Tab
Как сделать выход из цикла While(25-35 строки) при нажатии клавиш Tab и продолжить выполнение...

Как выйти из цикла?
Здрасьте!Я новичок, и у меня достаточно глупый вопрос. Как тут реализовать выход из цикла? ...

Оформить и обработать в виде события выход из программы при нажатии клавиши Esc
Ребят, помогите пожалуйста &quot;оформить и обработать в виде события выход из программы при нажатии...

7
SDev
44 / 42 / 31
Регистрация: 15.03.2013
Сообщений: 91
09.04.2013, 05:12 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

первое, код ESC -27 или 0x1b
второе, ф-ия kbhit() просто проверяет наличие в буфере ввода кода нажатой клавиши и возвращает 0 или 0xffff.
по вашему алгоритму лучше признаком выхода из цикла сделать ввод пустой строки
C
1
2
gets( str );
if(str[0]==0) break;
если очень хотите с ESC, то строки с 9 по 11 так можно сделать
C
1
2
3
4
while((c=kbhit())==0);
c=getch();
if(c==0x1b) break;
putchar(c); str[0]=c; gets(str+1);
1
art1535
7 / 7 / 3
Регистрация: 19.02.2013
Сообщений: 76
10.04.2013, 21:16  [ТС] 3
Большое спасибо, прояснилось. Только есть несколько вопросов:

Первые две строчки в этом коде

C
1
2
while((c=kbhit())==0);
c=getch();
Первая ясна, у нас пустой цикл, ждем нажатие клавиши. Код которой, присваиваем переменной с

А вот зачем нужна тогда вторая строчка с вызовом функции getch() ?
И тут же подвопрос, возможно глупый, а код символа и код клавиши - это одно и тоже?
0
SDev
44 / 42 / 31
Регистрация: 15.03.2013
Сообщений: 91
11.04.2013, 02:15 4
сорри, я ввел в заблуждение: функция kbhit() не возвращает кода клавиши(символа), она возвращает 0 или 0xffff
и после ее проверки код символа остается в буфере клавиатуры, а уже функция getch() забирает его оттуда.
т.е. правильнее будет
C
1
2
while(kbhit()==0);
c=getch();
в данных примерах коды символа и клавиши одно и тоже. строго говоря - код символа нажатой клавиши.
1
11.04.2013, 02:15
art1535
7 / 7 / 3
Регистрация: 19.02.2013
Сообщений: 76
11.04.2013, 03:03  [ТС] 5
А вывести код клавиши, соответственно:

C
1
printf("%d",c );
Так?
0
SDev
44 / 42 / 31
Регистрация: 15.03.2013
Сообщений: 91
11.04.2013, 03:10 6
да так
0
art1535
7 / 7 / 3
Регистрация: 19.02.2013
Сообщений: 76
11.04.2013, 03:20  [ТС] 7
C
1
printf( "%#X\n\n",c );
Коды верхних цифровых клавиш совпадают с табличными, остальные - нет.
0
SDev
44 / 42 / 31
Регистрация: 15.03.2013
Сообщений: 91
11.04.2013, 07:17 8
таблица ASCII ?
вот программка для изучения кодов символов.
печатает символьное представление, шестнадцатеричное и десятичное.
C
1
2
3
4
5
6
7
8
9
10
void main(void)
{
int c;
do{
while((kbhit())==0);
c=getch();
if(c==0x1b) break;// выход по ESC
else {  printf("%c : %#X : %d\n",c,c,c);}
}while(1);
}
0
11.04.2013, 07:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2013, 07:17

Выйти из цикла при нажатии на кнопку
Добрый вечер! Программа виснет при нажатии Button1. Судя по всему не выходит из цикла. Помогите...

Как сделать выход из цикла при нажатии любой клавиши?
У меня Python 3.2.5 как сделать выход из цикла по нажатию любой клавиши!! зарание спасибо!

Старый борланд: как выйти из бесконечного цикла по нажатию заданной клавиши?
Короче нужно сделать прогу которая считает сколько отрицательных,положительных,равных 0 ввел...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru