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

Выход из цикла по нажатию определенной клавиши - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
Wladius
12 / 7 / 2
Регистрация: 06.01.2013
Сообщений: 127
22.06.2013, 13:54     Выход из цикла по нажатию определенной клавиши #1
Допустим у меня есть какой-нибудь while(1) и мне нужно, чтобы при нажатии, например, esc или enter цикл завершался, как такое сделать?

Добавлено через 8 минут
А еще лучше, чтобы для продолжения цикла нажать enter, а для выхода из него esc и так после каждой итерации.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2013, 13:54     Выход из цикла по нажатию определенной клавиши
Посмотрите здесь:

Выход из консоли по нажатию клавиши C++
C++ Выход из бесконечного цикла по нажатию кнопки.
C++ Выход по нажатию клавиши из терминала (Linux(UNIX)
Выход по нажатию ESC C++
C++ выход по нажатию esc
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
22.06.2013, 14:18     Выход из цикла по нажатию определенной клавиши #2
Цитата Сообщение от Wladius Посмотреть сообщение
Допустим у меня есть какой-нибудь while(1) и мне нужно, чтобы при нажатии, например, esc или enter цикл завершался, как такое сделать?
Добавлено через 8 минут
А еще лучше, чтобы для продолжения цикла нажать enter, а для выхода из него 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
#include <windows.h>
#include <iostream>
using namespace std;
 
bool ParseVKKey(int vKey);
 
int main()
{
    bool bWait = false;
    bool bStop = false;
    for(int i  = 0; i < INT_MAX && !bStop; i++)
    {
        cout<<"\nITERATION # "<<i + 1<<endl;
        bWait = true;
        while(bWait && !bStop)
        {
            cout<<"\rPRESS Enter for next iteration ESC - for exit";
            bStop =  ParseVKKey(VK_ESCAPE);
            bWait = !ParseVKKey(VK_RETURN);
            cin.sync();
            cin.clear();
            Sleep(100);
        }
        
        
    }
    return 0;
}
 
bool ParseVKKey(int vKey)
{
    bool bPress = false;
    if(GetAsyncKeyState(vKey))
    if(GetAsyncKeyState(vKey))
        bPress = true;
    return bPress;
}
Миниатюры
Выход из цикла по нажатию определенной клавиши  
Wladius
12 / 7 / 2
Регистрация: 06.01.2013
Сообщений: 127
22.06.2013, 14:37  [ТС]     Выход из цикла по нажатию определенной клавиши #3
@-=ЮрА=-, спасибо, но по-моему довольно сложный для понимания вариант
Не понимаю насчет кодов клавиш - с одной стороны обозначено ParseVKKey(int vKey), а тут уже ParseVKKey(VK_ESCAPE)

Добавлено через 1 минуту
И нужно еще каждый раз очищать поток ввода? cin.clear();
-=ЮрА=-
Заблокирован
Автор FAQ
22.06.2013, 14:39     Выход из цикла по нажатию определенной клавиши #4
Цитата Сообщение от Wladius Посмотреть сообщение
а тут уже ParseVKKey(VK_ESCAPE)
отнють не сложный
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
bool ParseVKKey(int vKey);
- это объявление функции, а это уже использование в программе
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ParseVKKey(VK_ESCAPE);
VK_ESCAPE/VK_RETURN это известные константы задефайненные в WinUser.h
Миниатюры
Выход из цикла по нажатию определенной клавиши  
-=ЮрА=-
Заблокирован
Автор FAQ
22.06.2013, 14:41     Выход из цикла по нажатию определенной клавиши #5
Цитата Сообщение от Wladius Посмотреть сообщение
И нужно еще каждый раз очищать поток ввода? cin.clear();
- да если юзер вводил что то в цикле ожидания нажатия Enter, то произойдёт проскок на столько итерайций сколько символов было введено. @Wladius, пробегись дебагером лучше - это будет лучше любых пояснений. На счёт простоты кода - проще сомневаюсь что возможно сделать не прибегая к getch - в коде всего 1 функция, которая использует 1 стандартную функцию
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
GetAsyncKeyState(vKey)
- куда уж проще и меньше
Wladius
12 / 7 / 2
Регистрация: 06.01.2013
Сообщений: 127
22.06.2013, 14:48  [ТС]     Выход из цикла по нажатию определенной клавиши #6
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
возможно сделать не прибегая к getch
Спасибо, а как подобное делается при помощи getсh ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2013, 15:39     Выход из цикла по нажатию определенной клавиши
Еще ссылки по теме:

C++ Нажатие определенной клавиши на клавиатуре = Запуск определенной функции
C++ Запуск\остановка цикла по нажатию клавиши
C++ Выход из цикла после нажатия определенной клавиши

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
22.06.2013, 15:39     Выход из цикла по нажатию определенной клавиши #7
Цитата Сообщение от Wladius Посмотреть сообщение
Спасибо, а как подобное делается при помощи getсh ?
- вот так
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
#include <stdio.h>
#include <conio.h>
 
int main()
{
    int i;
    int iWait = 0;
    int iStop = 0;
    for(i  = 0; !iStop; i++)
    {
        printf("\nITERATION # %d\n", i + 1);
        iWait = true;
        while(iWait && !iStop)
        {
            printf("\rPRESS Enter for next iteration ESC - for exit");
            switch(getch())
            {
            case 13:
                iWait = 0;
                break;
            case 27:
                iStop = 1;
                break;
            }
        }
    }
    return 0;
}
Миниатюры
Выход из цикла по нажатию определенной клавиши  
Yandex
Объявления
22.06.2013, 15:39     Выход из цикла по нажатию определенной клавиши
Ответ Создать тему
Опции темы

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