Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/131: Рейтинг темы: голосов - 131, средняя оценка - 4.72
 Аватар для S@nchezzz
3 / 3 / 0
Регистрация: 17.12.2008
Сообщений: 51

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

24.07.2010, 03:32. Показов 24219. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.07.2010, 03:32
Ответы с готовыми решениями:

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

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

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

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

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

Добавлено через 7 минут
да, писка не будет, т.к. паралельно должен работать цикл и опрашивать клаву...
если бы можно было for запустить отдельно...
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
24.07.2010, 04:10
Цитата Сообщение от 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
 Аватар для S@nchezzz
3 / 3 / 0
Регистрация: 17.12.2008
Сообщений: 51
24.07.2010, 04:15  [ТС]
Lavroff, Вы сказали, что будет пищать при нажатии Enter, если символ не равен 'q'. Возникает вопрос: возможно ли программно эмулировать нажатие клавиши Enter?
easybudda Такое бесилово - есть наипростейший будильник)
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
24.07.2010, 04:42
S@nchezzz, Кажется возможно... Была какая-то комманда...
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
24.07.2010, 07:52
Не знаю как это реализовать на С, но вот на пример на ассемблеое под ДОС есть управляющие символы (которые совпадают с сишными), и есть символ 07h (0х07)(вроде бы так)), который при выводе заставляет пищать системный динамик, если выводить(просто выводить на печать) этот символ в цикле, то будет почти непрерывное пищание. Не уверен, что такое можно провернуть на С, но чем мог - тем помог))
0
24.07.2010, 10:43

Не по теме:

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

0
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
24.07.2010, 11:37
S@nchezzz, kbhit().
0
22 / 22 / 4
Регистрация: 15.04.2009
Сообщений: 100
24.07.2010, 12:03
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
 Аватар для S@nchezzz
3 / 3 / 0
Регистрация: 17.12.2008
Сообщений: 51
24.07.2010, 20:46  [ТС]
Kastaneda, почти непрерывное пищание дает, выведенный на печать, оператор(если не путаю) "\a"
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
24.07.2010, 23:21
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
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
25.07.2010, 20:44
Цитата Сообщение от S@nchezzz Посмотреть сообщение
Kastaneda, почти непрерывное пищание дает, выведенный на печать, оператор(если не путаю) "\a"
Он же '\7' (ASCII код 07h)
0
 Аватар для 6a6kin
232 / 102 / 5
Регистрация: 18.04.2010
Сообщений: 294
26.07.2010, 01:27
Почему бы не использовать стандартный пример?
C++
1
2
3
4
5
    do 
    {
        cout << '\a';
    } 
    while (_getch() != 'q');
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
26.07.2010, 01:41
Цитата Сообщение от 6a6ka Посмотреть сообщение
Почему бы не использовать стандартный пример?
блокирует выполнение, пока не нажмёшь что-нибудь.
These functions lock the calling thread and are therefore thread-safe.For non-locking versions, see _getch_nolock, _getwch_nolock.
MSDN
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.07.2010, 01:41
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru