Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
mh-coder
-36 / 29 / 4
Регистрация: 01.02.2014
Сообщений: 839
1

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

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

Сообственно код

void main() {

while(true){

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

}

нажимаю клавишу, выводит по 2 буквы, почему? как сделать чтобы один раз за цикл выводилось значение?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2014, 21:07
Ответы с готовыми решениями:

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

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

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

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

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

15
nmcf
6274 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
19.05.2014, 21:10 2
У тебя бесконечный цикл.
0
mh-coder
-36 / 29 / 4
Регистрация: 01.02.2014
Сообщений: 839
19.05.2014, 21:14  [ТС] 3
nmcf, я понимаю, но по логке, он выводит 1 букву, я нажимаю кнопку, он выводит снова 1 букву , а в реале после нажатия выводит сразу 2, как так?
0
nmcf
6274 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
19.05.2014, 21:20 4
Попробуй _cputs() вместо cout.
0
Тамика
Котовчанин
919 / 463 / 195
Регистрация: 16.02.2010
Сообщений: 3,267
Записей в блоге: 32
19.05.2014, 21:23 5
Про getch советую почитать.
0
mh-coder
-36 / 29 / 4
Регистрация: 01.02.2014
Сообщений: 839
19.05.2014, 21:25  [ТС] 6
nmcf, а смысл? вопров другом, cout<<"|y|"; - это для наглядности, на самом деле у меня там куча кода которая по 2 раза вплняется
Тамика, а что с ним не так?
0
newbie666
Заблокирован
19.05.2014, 21:27 7
Цитата Сообщение от mh-coder Посмотреть сообщение
он выводит снова 1 букву
а он и выводит по одной букве на одно нажатие клавиши, у тебя просто руки трясутся - вот и щёлкаешь несколько раз по клавише
0
mh-coder
-36 / 29 / 4
Регистрация: 01.02.2014
Сообщений: 839
19.05.2014, 21:29  [ТС] 8
я тут заметил, если нажимаю например стрелочку, то 2 раза страбатывает, если букву то 1, как сделать чтобы при нажатии на стрелочку цыкл 1 раз срабатывал?
0
nmcf
6274 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
19.05.2014, 21:39 9
Для таких клавиш первый байт должен быть ноль. Вот по нему и ориентируйся. Если ноль, то делай второй getch().
0
newbie666
Заблокирован
19.05.2014, 21:40 10
Цитата Сообщение от mh-coder Посмотреть сообщение
я тут заметил
дело в том, что:
getch () function returns two keycodes for arrow keys (and some other special keys)
то есть если ты нажимаешь специфическую виртуальную кнопку, функция по очереди возвращает два кода кнопки, для этого её два раза вызывать нужно - вот и две буквы вылезают у тебя в консоле.
0
mh-coder
-36 / 29 / 4
Регистрация: 01.02.2014
Сообщений: 839
19.05.2014, 21:41  [ТС] 11
а как сделать чтобы 1 была, вторая?
0
newbie666
Заблокирован
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
nmcf
6274 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
19.05.2014, 21:46 13
Я подумал, что 0xE0 для getwch().
0
mh-coder
-36 / 29 / 4
Регистрация: 01.02.2014
Сообщений: 839
19.05.2014, 21:57  [ТС] 14
newbie666, клас, спс, то что нужно, а можешь только обьяснить как оно раотает? почеу цикл по 1 разу выводит букву и почему я ввожу клавишу 1 раз и результат нормальный могу взять из второго _getch()??
0
newbie666
Заблокирован
19.05.2014, 22:20 15
Цитата Сообщение от mh-coder Посмотреть сообщение
почеу цикл по 1 разу выводит букву
ну потому что там проверка есть, если сложна кнопка нажата, результат нажатия которой нужно выдаивать из гетчара два раза - то и вызывается второй вызов гетчара, что "подоить" поток ввода и вытащить оттуда всё. Иначе, при повторном заходе в вайл у юзера не спросят ввести символ, т
Цитата Сообщение от mh-coder Посмотреть сообщение
почему я ввожу клавишу 1 раз и результат нормальный могу взять из второго _getch()??
.к. в потоке остался одни символ от сложной кнопки и гетчар сразу вернёт остаток без всяких пауз.
ну потому что у составной клавиши сложной сам код как раз и идёт вторым байтом в тотоке
1
UnsKneD
алкокодер
155 / 151 / 41
Регистрация: 27.12.2012
Сообщений: 550
19.05.2014, 22:25 16
mh-coder, почитайте про отлавливание нажатий, про хуки(Hooks).
1
19.05.2014, 22:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2014, 22:25

почему не срабатывает последняя итерация
подскажите почему не срабатывает и как исправить чтобы был вывод i=3 ? (нужен...

Почему не срабатывает if, если истина?
Вообщем задание на двумерную динамику. Есть 2 кучки камней. Входной файл...

Почему в цикле не срабатывает break
Привет всем! Объясните почему в этом цикле при i=2 не срабатывает break?...


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

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

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