Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
1

While срабатывает 2 раза, почему?

19.05.2014, 21:07. Показов 2360. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Сообственно код

void main() {

while(true){

cout<<"|y|";
_getch();
}

}

нажимаю клавишу, выводит по 2 буквы, почему? как сделать чтобы один раз за цикл выводилось значение?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.05.2014, 21:07
Ответы с готовыми решениями:

Почему срабатывает rtl
Не могу понять, в чем ошибка. Брат делает задания из одной книги и на одной из функций VC++ падает....

Не срабатывает условие. Почему?
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int...

Почему не срабатывает getline() ?
Все привет почему то не срабатывает первый getline string comp_; cout &lt;&lt; &quot;1. Название: &quot; &lt;&lt;...

Почему не срабатывает EOF
У меня стоит Visual Studio 2010 написал простенькую программу #include &quot;stdafx.h&quot; #include...

15
7789 / 6556 / 2984
Регистрация: 14.04.2014
Сообщений: 28,657
19.05.2014, 21:10 2
У тебя бесконечный цикл.
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
19.05.2014, 21:14  [ТС] 3
nmcf, я понимаю, но по логке, он выводит 1 букву, я нажимаю кнопку, он выводит снова 1 букву , а в реале после нажатия выводит сразу 2, как так?
0
7789 / 6556 / 2984
Регистрация: 14.04.2014
Сообщений: 28,657
19.05.2014, 21:20 4
Попробуй _cputs() вместо cout.
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
19.05.2014, 21:23 5
Про getch советую почитать.
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
19.05.2014, 21:25  [ТС] 6
nmcf, а смысл? вопров другом, cout<<"|y|"; - это для наглядности, на самом деле у меня там куча кода которая по 2 раза вплняется
Тамика, а что с ним не так?
0
Заблокирован
19.05.2014, 21:27 7
Цитата Сообщение от mh-coder Посмотреть сообщение
он выводит снова 1 букву
а он и выводит по одной букве на одно нажатие клавиши, у тебя просто руки трясутся - вот и щёлкаешь несколько раз по клавише
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
19.05.2014, 21:29  [ТС] 8
я тут заметил, если нажимаю например стрелочку, то 2 раза страбатывает, если букву то 1, как сделать чтобы при нажатии на стрелочку цыкл 1 раз срабатывал?
0
7789 / 6556 / 2984
Регистрация: 14.04.2014
Сообщений: 28,657
19.05.2014, 21:39 9
Для таких клавиш первый байт должен быть ноль. Вот по нему и ориентируйся. Если ноль, то делай второй getch().
0
Заблокирован
19.05.2014, 21:40 10
Цитата Сообщение от mh-coder Посмотреть сообщение
я тут заметил
дело в том, что:
getch () function returns two keycodes for arrow keys (and some other special keys)
то есть если ты нажимаешь специфическую виртуальную кнопку, функция по очереди возвращает два кода кнопки, для этого её два раза вызывать нужно - вот и две буквы вылезают у тебя в консоле.
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
19.05.2014, 21:41  [ТС] 11
а как сделать чтобы 1 была, вторая?
0
Заблокирован
19.05.2014, 21:43 12
Лучший ответ Сообщение было отмечено mh-coder как решение

Решение

Цитата Сообщение от nmcf Посмотреть сообщение
Для таких клавиш первый байт должен быть ноль
не только ноль, но и 0xE0 - тоже учитывать надо....
Правда не понятно, что ваще ТС хочет сделать ....

Добавлено через 1 минуту
Цитата Сообщение от mh-coder Посмотреть сообщение
а как сделать чтобы 1 была?
C++
1
2
3
4
5
6
7
    while(true){
 
        cout<<"|y|";
        int ch = _getch();
        if (ch == 0 || ch == 224)
            _getch();       
    }
1
7789 / 6556 / 2984
Регистрация: 14.04.2014
Сообщений: 28,657
19.05.2014, 21:46 13
Я подумал, что 0xE0 для getwch().
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
19.05.2014, 21:57  [ТС] 14
newbie666, клас, спс, то что нужно, а можешь только обьяснить как оно раотает? почеу цикл по 1 разу выводит букву и почему я ввожу клавишу 1 раз и результат нормальный могу взять из второго _getch()??
0
Заблокирован
19.05.2014, 22:20 15
Цитата Сообщение от mh-coder Посмотреть сообщение
почеу цикл по 1 разу выводит букву
ну потому что там проверка есть, если сложна кнопка нажата, результат нажатия которой нужно выдаивать из гетчара два раза - то и вызывается второй вызов гетчара, что "подоить" поток ввода и вытащить оттуда всё. Иначе, при повторном заходе в вайл у юзера не спросят ввести символ, т
Цитата Сообщение от mh-coder Посмотреть сообщение
почему я ввожу клавишу 1 раз и результат нормальный могу взять из второго _getch()??
.к. в потоке остался одни символ от сложной кнопки и гетчар сразу вернёт остаток без всяких пауз.
ну потому что у составной клавиши сложной сам код как раз и идёт вторым байтом в тотоке
1
алкокодер
157 / 153 / 41
Регистрация: 27.12.2012
Сообщений: 550
19.05.2014, 22:25 16
mh-coder, почитайте про отлавливание нажатий, про хуки(Hooks).
1
19.05.2014, 22:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.05.2014, 22:25
Помогаю со студенческими работами здесь

Почему не срабатывает инкремент?
В комментарии показал вывод программы. Все переменные почему равны 2 Получается инкремент не...

Почему два раза срабатывает слот у наследника?
Добрый вечер, помогите, пожалуйста, разобраться)) Создаю проект, на форме MyMainWindow...

Почему при нажатии клавиши Enter alert срабатывает 3 раза?
В любом случае: $(document).keypress(function (e) { if (e.which == 13) { ...

JS срабатывает со 2 раза
function register() { document.getElementById('but_input_aut').style.display = 'none'; ...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru