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

Выполнение цикла до тех пор, пока не будет нажата определенная клавиша - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 78, средняя оценка - 4.64
S@nchezzz
 Аватар для S@nchezzz
3 / 3 / 0
Регистрация: 17.12.2008
Сообщений: 51
24.07.2010, 03:32     Выполнение цикла до тех пор, пока не будет нажата определенная клавиша #1
Доброе время суток, люди добрые! Начал заниматься С++ не так давно, поэтому всех хтростей не знаю, в следствие чего прошу о помощи. Необходимо выполнять цикл до тех пор, пока не будет нажата определенная клавиша (или же не будет введет определенный символ). Пытался что-то предпринять сам и вот что из этого вышло:
C++
1
2
3
4
5
6
7
8
9
10
char ch;
        ch = '\0';
        for( ; ; ){
                cout << "\a";
                ch = getchar();
                if (ch == 'q'){
                        break;
                }
        }
        return 0;
Результат: один пик системного динамика и ожидание ввода символа, а хотелось бы непрерывное пищание до тех пор, пока не будет нажата/введен кнопка/символ.
Заранее спасибо)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.07.2010, 03:32     Выполнение цикла до тех пор, пока не будет нажата определенная клавиша
Посмотрите здесь:

Вводить отрицательные числа до тех пор пока не будет введено положительное число C++
C++ Запрашивать пароль до тех пор, пока он не будет правильно введен
Вводить с клавиатуры числа до тех пор, пока не будет нажата клавиша <<ESC>> C++
C++ Написать программу ввода произвольных символов до тех пор, пока не будет введен символ q
C++ Создать консольное приложение, которое продолжало бы работать до тех пор, пока не нажата клавиша "y"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
24.07.2010, 03:53     Выполнение цикла до тех пор, пока не будет нажата определенная клавиша #2
S@nchezzz, Все. Понял. Ща посмотрим


ЗЫ непрерывного пищания не будет никак. По крайней мере таким макаром. Будет писк при вводе символа или просто энтера, если он не совпадает с q. Но все по 1 разу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
int main()
{
    char ch;
    ch = '\0';
    while(1)
    {
        std::cout << "\a";
        ch = std::cin.get();
                if (ch == 'q')
                {
                        break;
                }
        }
        return 0;
}
illuminati
20 / 20 / 4
Регистрация: 14.06.2010
Сообщений: 108
24.07.2010, 03:59     Выполнение цикла до тех пор, пока не будет нажата определенная клавиша #3
Ну так правильно что 1 пик)
getchar ждет пока ты введешь символ))
надо подумать, сходу в голову ничего не лезет)
возможно цикл отдельно, а проверку на ввод отдельно. и если символ тот что нужен то выходить из программы EXIT()

Добавлено через 2 минуты
C
1
2
3
4
5
6
7
8
9
10
11
char ch;
ch = '\0';
ch = getchar();
if (ch == 'q')
   {
        return 0;
   }
for( ; ; )
    {
         cout << "\a";
    }
Добавлено через 1 минуту
попробуй так, нет на чем скомпилить, но по идее должно быть так
цикл пищит, а иф прерывает прогу
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
24.07.2010, 03:59     Выполнение цикла до тех пор, пока не будет нажата определенная клавиша #4
illuminati, Крайне плохая идея. До ввода символа так и не дойдет
и break; там кстати вообще не катит. Ибо он ведь не в цикле
illuminati
20 / 20 / 4
Регистрация: 14.06.2010
Сообщений: 108
24.07.2010, 04:09     Выполнение цикла до тех пор, пока не будет нажата определенная клавиша #5
Lavroff, прав)
а так?

Добавлено через 25 секунд
тоже нет, сам понял)))

Добавлено через 7 минут
да, писка не будет, т.к. паралельно должен работать цикл и опрашивать клаву...
если бы можно было for запустить отдельно...
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
24.07.2010, 04:10     Выполнение цикла до тех пор, пока не будет нажата определенная клавиша #6
Цитата Сообщение от S@nchezzz Посмотреть сообщение
Доброе время суток, люди добрые! Начал заниматься С++ не так давно, поэтому всех хтростей не знаю, в следствие чего прошу о помощи. Необходимо выполнять цикл до тех пор, пока не будет нажата определенная клавиша (или же не будет введет определенный символ). Пытался что-то предпринять сам и вот что из этого вышло:
C++
1
2
3
4
5
6
7
8
9
10
char ch;
        ch = '\0';
        for( ; ; ){
                cout << "\a";
                ch = getchar();
                if (ch == 'q'){
                        break;
                }
        }
        return 0;
Результат: один пик системного динамика и ожидание ввода символа, а хотелось бы непрерывное пищание до тех пор, пока не будет нажата/введен кнопка/символ.
Заранее спасибо)
На вскидку два решения: или делать неблокируемое чтение (select(), pool(), etc..), или создавать два потока, в одном пищать, в другом нажатия клавиш отлавливать... Просто из любопытства: а зачем такое бесилово нужно?
S@nchezzz
 Аватар для S@nchezzz
3 / 3 / 0
Регистрация: 17.12.2008
Сообщений: 51
24.07.2010, 04:15  [ТС]     Выполнение цикла до тех пор, пока не будет нажата определенная клавиша #7
Lavroff, Вы сказали, что будет пищать при нажатии Enter, если символ не равен 'q'. Возникает вопрос: возможно ли программно эмулировать нажатие клавиши Enter?
easybudda Такое бесилово - есть наипростейший будильник)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
24.07.2010, 04:42     Выполнение цикла до тех пор, пока не будет нажата определенная клавиша #8
S@nchezzz, Кажется возможно... Была какая-то комманда...
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
24.07.2010, 07:52     Выполнение цикла до тех пор, пока не будет нажата определенная клавиша #9
Не знаю как это реализовать на С, но вот на пример на ассемблеое под ДОС есть управляющие символы (которые совпадают с сишными), и есть символ 07h (0х07)(вроде бы так)), который при выводе заставляет пищать системный динамик, если выводить(просто выводить на печать) этот символ в цикле, то будет почти непрерывное пищание. Не уверен, что такое можно провернуть на С, но чем мог - тем помог))
Johnny_D
24.07.2010, 10:43
  #10

Не по теме:

Запищать все нафиг

Хохол
Эксперт C++
 Аватар для Хохол
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
24.07.2010, 11:37     Выполнение цикла до тех пор, пока не будет нажата определенная клавиша #11
S@nchezzz, kbhit().
Bazan
22 / 22 / 0
Регистрация: 15.04.2009
Сообщений: 100
24.07.2010, 12:03     Выполнение цикла до тех пор, пока не будет нажата определенная клавиша #12
S@nchezzz,
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
#include <process.h>
#include <iostream>
 
int exi=1;
 
void Thread( void* pParams )
{ 
    char ch = '\0';
 
    while(1)
    {
        ch = std::cin.get();
        if (ch == 'q')
        {
            exi=0;
            _endthread();
        }
    }
}
 
int main()
{ 
    _beginthread( Thread, 0, NULL );
 
    while( exi!=0 )
        std::cout << "\a";
 
    return 0;
}
S@nchezzz
 Аватар для S@nchezzz
3 / 3 / 0
Регистрация: 17.12.2008
Сообщений: 51
24.07.2010, 20:46  [ТС]     Выполнение цикла до тех пор, пока не будет нажата определенная клавиша #13
Kastaneda, почти непрерывное пищание дает, выведенный на печать, оператор(если не путаю) "\a"
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
24.07.2010, 23:21     Выполнение цикла до тех пор, пока не будет нажата определенная клавиша #14
C++
1
2
3
4
5
6
7
8
#include <iostream>
 
int main(){
    std::cout << "Press Ctrl+C for quit..." << std::endl;
    while ( true )
                std::cout << '\a';
    return 0;
}
Добавлено через 2 минуты
в седьмой винде зависло окошко, закрываться ничем не хочет
попискивает теперь время от времени...
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
25.07.2010, 20:44     Выполнение цикла до тех пор, пока не будет нажата определенная клавиша #15
Цитата Сообщение от S@nchezzz Посмотреть сообщение
Kastaneda, почти непрерывное пищание дает, выведенный на печать, оператор(если не путаю) "\a"
Он же '\7' (ASCII код 07h)
6a6kin
 Аватар для 6a6kin
232 / 102 / 2
Регистрация: 18.04.2010
Сообщений: 295
26.07.2010, 01:27     Выполнение цикла до тех пор, пока не будет нажата определенная клавиша #16
Почему бы не использовать стандартный пример?
C++
1
2
3
4
5
    do 
    {
        cout << '\a';
    } 
    while (_getch() != 'q');
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2010, 01:41     Выполнение цикла до тех пор, пока не будет нажата определенная клавиша
Еще ссылки по теме:

C++ Ввод произвольных символов до тех пор, пока не будет введен символ q
Выполнение функции, пока не будет нажата любая кнопка C++
Ввод чисел с клавиатуры до тех пор, пока не будет введена цифра 1 (цикл do) C++

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
26.07.2010, 01:41     Выполнение цикла до тех пор, пока не будет нажата определенная клавиша #17
Цитата Сообщение от 6a6ka Посмотреть сообщение
Почему бы не использовать стандартный пример?
блокирует выполнение, пока не нажмёшь что-нибудь.
These functions lock the calling thread and are therefore thread-safe.For non-locking versions, see _getch_nolock, _getwch_nolock.
MSDN
Yandex
Объявления
26.07.2010, 01:41     Выполнение цикла до тех пор, пока не будет нажата определенная клавиша
Ответ Создать тему
Опции темы

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