0 / 0 / 0
Регистрация: 15.07.2015
Сообщений: 28

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

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

Author24 — интернет-сервис помощи студентам
Есть такой код, у меня этот цикл выполняется 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
5118 / 4569 / 854
Регистрация: 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
5118 / 4569 / 854
Регистрация: 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
5118 / 4569 / 854
Регистрация: 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
5118 / 4569 / 854
Регистрация: 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
5118 / 4569 / 854
Регистрация: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Система статов в Unity
GameUnited 20.04.2025
Статы — фундаментальный элемент игрового дизайна, который определяет характеристики персонажей, предметов и других объектов в игровом мире. Будь то показатель силы в RPG, скорость передвижения в. . .
Статические свойства и методы в TypeScript
run.dev 20.04.2025
TypeScript прочно занял своё место в системе современной веб-разработки. Этот строго типизированный язык программирования не просто расширяет возможности JavaScript — он делает разработку более. . .
Batch Transform и Batch Gizmo Drawing API в Unity
GameUnited 20.04.2025
В мире разработки игр и приложений на Unity производительность всегда была критическим фактором успеха. Создатели игр постоянно балансируют между визуальной привлекательностью и плавностью работы. . .
Звук в Unity: Рандомизация с Audio Random Container
GameUnited 20.04.2025
В современных играх звуковое оформление часто становится элементом, который либо полностью погружает игрока в виртуальный мир, либо разрушает атмосферу за считанные минуты. Представьте: вы исследуете. . .
Максимальная производительность C#: Советы, тестирование и заключение
stackOverflow 20.04.2025
Погружение в мир микрооптимизаций C# открывает перед разработчиком целый арсенал мощных техник. Но как определить, где и когда их применять? Ответ начинается с точных измерений и профилирования. . . .
Максимальная производительность C#: Предсказание ветвлений
stackOverflow 20.04.2025
Третий ключевой аспект низкоуровневой оптимизации — предсказание ветвлений. Эта тема менее известна среди разработчиков, но её влияние на производительность может быть колоссальным. Чтобы понять. . .
Максимальная производительность C#: Векторизация (SIMD)
stackOverflow 20.04.2025
Помимо работы с кэшем, другим ключевым аспектом низкоуровневой оптимизации является векторизация вычислений. SIMD (Single Instruction, Multiple Data) позволяет обрабатывать несколько элементов данных. . .
Максимальная производительность C#: Процессорный кэш
stackOverflow 20.04.2025
Знакомство с внутренним устройством процессорного кэша — ключевой шаг в написании по-настоящему быстрого кода на C#. Этот слой архитектуры компьютера часто ускользает от внимания разработчиков, но. . .
Максимальная производительность C#: Введение в микрооптимизации
stackOverflow 20.04.2025
В мире разработки на C# многие привыкли полагаться на . NET Runtime, который "магическим образом" сам оптимизирует код. И часто это работает - современные JIT-компиляторы творят чудеса. Но когда речь. . .
MVC фреймворк в PHP
Jason-Webb 19.04.2025
Архитектурный паттерн Model-View-Controller (MVC) – это не просто модный термин из мира веб-разработки. Для PHP-программистов это фундаментальный подход к организации кода, который радикально меняет. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru