Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.65/96: Рейтинг темы: голосов - 96, средняя оценка - 4.65
3 / 3 / 0
Регистрация: 17.12.2008
Сообщений: 51
1

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

24.07.2010, 03:32. Просмотров 18260. Ответов 16
Метки нет (Все метки)

Доброе время суток, люди добрые! Начал заниматься С++ не так давно, поэтому всех хтростей не знаю, в следствие чего прошу о помощи. Необходимо выполнять цикл до тех пор, пока не будет нажата определенная клавиша (или же не будет введет определенный символ). Пытался что-то предпринять сам и вот что из этого вышло:
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;
Результат: один пик системного динамика и ожидание ввода символа, а хотелось бы непрерывное пищание до тех пор, пока не будет нажата/введен кнопка/символ.
Заранее спасибо)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.07.2010, 03:32
Ответы с готовыми решениями:

Вводить с клавиатуры числа до тех пор, пока не будет нажата клавиша <<ESC>>
Задание: Вводить с клавиатуры числа до тех пор, пока не будет нажата клавиша &lt;&lt;ESC&gt;&gt;. На экран...

Создать консольное приложение, которое продолжало бы работать до тех пор, пока не нажата клавиша "y"
Доброго времени суток. Прошу помочь в решении поставленного передо мной вопроса. Суть: Нужно...

Вводить значения пока не будет нажата определенная буква
Задача: Заполнять базу до тех пор пока пользователь не нажмет определению кнопку и чтобы его...

Выполнение функции, пока не будет нажата любая кнопка
Собственно речь о !Kbhit() Думаю опытные люди знают что это за функция и что она делает, а...

16
В астрале
Эксперт С++
8029 / 4786 / 655
Регистрация: 24.06.2010
Сообщений: 10,558
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;
}
0
21 / 21 / 5
Регистрация: 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 минуту
попробуй так, нет на чем скомпилить, но по идее должно быть так
цикл пищит, а иф прерывает прогу
0
В астрале
Эксперт С++
8029 / 4786 / 655
Регистрация: 24.06.2010
Сообщений: 10,558
24.07.2010, 03:59 4
illuminati, Крайне плохая идея. До ввода символа так и не дойдет
и break; там кстати вообще не катит. Ибо он ведь не в цикле
0
21 / 21 / 5
Регистрация: 14.06.2010
Сообщений: 108
24.07.2010, 04:09 5
Lavroff, прав)
а так?

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

Добавлено через 7 минут
да, писка не будет, т.к. паралельно должен работать цикл и опрашивать клаву...
если бы можно было for запустить отдельно...
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10897 / 6813 / 1623
Регистрация: 25.07.2009
Сообщений: 12,517
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..), или создавать два потока, в одном пищать, в другом нажатия клавиш отлавливать... Просто из любопытства: а зачем такое бесилово нужно?
0
3 / 3 / 0
Регистрация: 17.12.2008
Сообщений: 51
24.07.2010, 04:15  [ТС] 7
Lavroff, Вы сказали, что будет пищать при нажатии Enter, если символ не равен 'q'. Возникает вопрос: возможно ли программно эмулировать нажатие клавиши Enter?
easybudda Такое бесилово - есть наипростейший будильник)
0
В астрале
Эксперт С++
8029 / 4786 / 655
Регистрация: 24.06.2010
Сообщений: 10,558
24.07.2010, 04:42 8
S@nchezzz, Кажется возможно... Была какая-то комманда...
0
Jesus loves me
Эксперт С++
5116 / 3128 / 353
Регистрация: 12.12.2009
Сообщений: 7,913
Записей в блоге: 2
24.07.2010, 07:52 9
Не знаю как это реализовать на С, но вот на пример на ассемблеое под ДОС есть управляющие символы (которые совпадают с сишными), и есть символ 07h (0х07)(вроде бы так)), который при выводе заставляет пищать системный динамик, если выводить(просто выводить на печать) этот символ в цикле, то будет почти непрерывное пищание. Не уверен, что такое можно провернуть на С, но чем мог - тем помог))
0
Johnny_D
24.07.2010, 10:43
  #10

Не по теме:

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

0
Эксперт С++
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
24.07.2010, 11:37 11
S@nchezzz, kbhit().
0
22 / 22 / 4
Регистрация: 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;
}
1
3 / 3 / 0
Регистрация: 17.12.2008
Сообщений: 51
24.07.2010, 20:46  [ТС] 13
Kastaneda, почти непрерывное пищание дает, выведенный на печать, оператор(если не путаю) "\a"
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10897 / 6813 / 1623
Регистрация: 25.07.2009
Сообщений: 12,517
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 минуты
в седьмой винде зависло окошко, закрываться ничем не хочет
попискивает теперь время от времени...
2
Jesus loves me
Эксперт С++
5116 / 3128 / 353
Регистрация: 12.12.2009
Сообщений: 7,913
Записей в блоге: 2
25.07.2010, 20:44 15
Цитата Сообщение от S@nchezzz Посмотреть сообщение
Kastaneda, почти непрерывное пищание дает, выведенный на печать, оператор(если не путаю) "\a"
Он же '\7' (ASCII код 07h)
0
231 / 101 / 6
Регистрация: 18.04.2010
Сообщений: 294
26.07.2010, 01:27 16
Почему бы не использовать стандартный пример?
C++
1
2
3
4
5
    do 
    {
        cout << '\a';
    } 
    while (_getch() != 'q');
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10897 / 6813 / 1623
Регистрация: 25.07.2009
Сообщений: 12,517
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
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.07.2010, 01:41

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

Запрашивать пароль до тех пор, пока он не будет правильно введен
Составить программу, которая запрашивает пароль (например, четырехзначное число) до тех пор, пока...

Ввод произвольных символов до тех пор, пока не будет введен символ q
Написать программу ввода произвольных символов до тех пор, пока не будет введен символ q.

Ввод чисел с клавиатуры до тех пор, пока не будет введена цифра 1 (цикл do)
Используя оператор цикла do, составить программу, которая будет требовать ввод чисел с клавиатуры...

Вводить отрицательные числа до тех пор пока не будет введено положительное число
Вводить отрицательные числа до тех пор пока не будет введено положительное число. Найти кол-во...


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

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

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