Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.58/26: Рейтинг темы: голосов - 26, средняя оценка - 4.58
Wladius
12 / 7 / 3
Регистрация: 06.01.2013
Сообщений: 127
1

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

22.06.2013, 13:54. Просмотров 5315. Ответов 6
Метки нет (Все метки)

Допустим у меня есть какой-нибудь while(1) и мне нужно, чтобы при нажатии, например, esc или enter цикл завершался, как такое сделать?

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

Выход из цикла после нажатия определенной клавиши
Здравствуйте, собственно, хотел узнать, как мне выйти из цикла, нажав определенную клавишу? Обычный...

Выход из консоли по нажатию клавиши
Что надо вставить, что бы по нажатию клавиши, скажем, <Enter> произошел выход из консольной...

Выход по нажатию клавиши из терминала (Linux(UNIX)
Уважаемые программисты, возникла проблема. Есть клиент, в нем 2 потока. Нужно организовать выход из...

Выход из бесконечного цикла по нажатию кнопки.
Привет всем. как можно выйти из такого цикла по нажатию какой любой кнопки (например Esc) int...

Запуск\остановка цикла по нажатию клавиши
Всем привет! Вопрос как реализовать запуск и остановку цикла в консольном приложении по нажатию...

6
-=ЮрА=-
Заблокирован
Автор 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;
}
2
Миниатюры
Выход из цикла по нажатию определенной клавиши  
Wladius
12 / 7 / 3
Регистрация: 06.01.2013
Сообщений: 127
22.06.2013, 14:37  [ТС] 3
@-=ЮрА=-, спасибо, но по-моему довольно сложный для понимания вариант
Не понимаю насчет кодов клавиш - с одной стороны обозначено ParseVKKey(int vKey), а тут уже ParseVKKey(VK_ESCAPE)

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

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

Нажатие определенной клавиши на клавиатуре = Запуск определенной функции
Здравствуйте. У меня такой вопрос: как при нажатии, к примеру, клавиши &quot;1&quot; на клавиатуре запустить...

Выход из цикла по нажатию клавиши
Возможно ли этот кусок кода приспособить к выходу из цикла не по воду -1 в m а по вводу допустим...


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

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

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