Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/34: Рейтинг темы: голосов - 34, средняя оценка - 4.97
0 / 0 / 0
Регистрация: 15.07.2015
Сообщений: 28

Цикл while выполняется два раза подряд

25.05.2017, 12:57. Показов 6811. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть такой код, у меня этот цикл выполняется 2 раза за одно нажатие клавиши, в чем может проблема?
Тоесть, выводится при первом нажатие 1,2 при втором 3,4 и тд

C++
1
2
3
4
5
6
    while (ch != 27);
    {
        ch = getch();
        k++;
        cout << k << endl;
    }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.05.2017, 12:57
Ответы с готовыми решениями:

Два раза выполняется один и тот же цикл
В данной недопрограмме процесс проходит не совсем так, как предполагалось: действия цикла while, где выполняется выбор строки для новой...

Даден массив. Все четные елементы массива уменьшыть в два раза, а нечетные увеличить в два раза.
С++. Даден массив. Все четные елементы массива уменьшыть в два раза, а нечетные увеличить в два раза. Сложновато :sorry:

Перечислить все последовательности из n нулей, единиц и двоек, в которых никакая группа цифр не повторяется два раза подряд (нет куска вида XX )
Перечислить все последовательности из n нулей, единиц и двоек, в которых никакая группа цифр не повторяется два раза подряд (нет куска вида...

9
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
25.05.2017, 13:14
POWERR, что это за точка с запятой после while?
C
1
while (ch != 27);
0
0 / 0 / 0
Регистрация: 15.07.2015
Сообщений: 28
25.05.2017, 13:23  [ТС]
_liv_, Случайная) без нее тоже работает не так как надо
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
25.05.2017, 13:32
Одновременно с k, выведи и ch. Что покажет?
Кстати, у меня работает без проблем...
0
0 / 0 / 0
Регистрация: 15.07.2015
Сообщений: 28
25.05.2017, 13:39  [ТС]
_liv_,
C++
1
cout << k <<endl<< int(ch) << endl;
Code
1
2
3
4
5
6
7
8
9
1
-32
2
77
 
3
-32
4
77
Откуда то -32 значение берется
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
25.05.2017, 13:41
Двойное срабатывание может быть от нажатия на функциональные клавиши...
0
0 / 0 / 0
Регистрация: 15.07.2015
Сообщений: 28
25.05.2017, 13:45  [ТС]
_liv_,
Цитата Сообщение от _liv_ Посмотреть сообщение
Двойное срабатывание может быть от нажатия на функциональные клавиши...
Ну у меня ноутбук, но стрелочки без доп.функций. И это можно как нибудь исправить?
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
25.05.2017, 13:56
Все понятно
Ты жмешь на "серую" "стрелку направо".
Данная управляющая клавиша возвращает ДВА кода 0xE0, 0x4D
При приеме в char (знаковый байт), код 0xE0 интерпретируется, как число -32, а 0x4D будет 77

Добавлено через 1 минуту
Цитата Сообщение от POWERR Посмотреть сообщение
И это можно как нибудь исправить?
Игнорировать код 0xe0 = 224 (беззнаковое число) = -32 (знаковое число)

Добавлено через 4 минуты
Клавиши F1-F12 возвращают первым байтом 0
Можно еще сделать так:
1) вызываешь первый раз getch()
2) проверяешь на 0 и -32, при равенстве любому из них, вызываешь getch() еще раз
0
0 / 0 / 0
Регистрация: 15.07.2015
Сообщений: 28
25.05.2017, 14:06  [ТС]
Цитата Сообщение от _liv_ Посмотреть сообщение
2) проверяешь на 0 и -32, при равенстве любому из них, вызываешь getch() еще раз
А почему тогда при втором вызове, опять -32 не будет возвращаться?
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
25.05.2017, 14:25
Лучший ответ Сообщение было отмечено POWERR как решение

Решение

После нажатия на данную кнопку в буфер, в памяти компьютера, помещается два кода.
Каждый вызов забирает оттуда по одному коду.

Добавлено через 8 минут
Сделать можно примерно так:
C
1
2
3
4
5
6
7
8
    while (ch != 27)
    {
        ch = getch();
        if ((ch == 0) || (ch == -32))
            continue;
        k++;
        cout << k << " " << ch << endl;
    }
Добавлено через 3 минуты
Это, разумеется, если не надо знать, что нам нужна именно клавиша "стрелка вправо", т.к. тогда ее код совпадет с "M"

Добавлено через 1 минуту
В противном случае, получив код "-32" последующий код надо понимать, как код соответствующей клавиши
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.05.2017, 14:25
Помогаю со студенческими работами здесь

Перечислить все последовательности из n нулей, единиц и двоек, в которых никакая группа цифр не повторяется два раза подряд (нет куска вида XX )
Перечислить все последовательности из n нулей, единиц и двоек, в которых никакая группа цифр не повторяется два раза подряд (нет куска вида...

Файлы. Программа, которая определяет если такой момент, что два раза вошли по одному пропуску или два раза вышли по одному (выводит все время истину)
Всем привет. Смысл задания примерно следующий: Есть файл Input.txt. Содержание его примерное такое: Все эти цифры могут меняться. 4...

Цикл for: зачем использовать разделитель " ; " два раза?
Cмотрите, какой вопрос. for (i = 0; ;i++) Не понимаю, зачем использовать разделитель &quot; ; &quot; два раза. Какую...

подскажите что с кодом не так? (просуммировать два раза по два столбца, функция)
Нужно создать функцию для суммирования двух столбцов и просуммировать два раза по два столбца. Сам массив задала, а функция работает не...

Если ввести один символ, то итерация цикла выполняется сразу два раза подряд
while (getchar()) printf(&quot;Итерация цикла.\n&quot;); Если ввести 1-ин символ, то итерация цикла выполняется сразу два раза подряд. Если...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru