Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 719
19.05.2014, 21:07     While срабатывает 2 раза, почему? #1
Сообственно код

void main() {

while(true){

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

}

нажимаю клавишу, выводит по 2 буквы, почему? как сделать чтобы один раз за цикл выводилось значение?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4306 / 3727 / 1256
Регистрация: 14.04.2014
Сообщений: 14,599
19.05.2014, 21:10     While срабатывает 2 раза, почему? #2
У тебя бесконечный цикл.
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 719
19.05.2014, 21:14  [ТС]     While срабатывает 2 раза, почему? #3
nmcf, я понимаю, но по логке, он выводит 1 букву, я нажимаю кнопку, он выводит снова 1 букву , а в реале после нажатия выводит сразу 2, как так?
nmcf
4306 / 3727 / 1256
Регистрация: 14.04.2014
Сообщений: 14,599
19.05.2014, 21:20     While срабатывает 2 раза, почему? #4
Попробуй _cputs() вместо cout.
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
19.05.2014, 21:23     While срабатывает 2 раза, почему? #5
Про getch советую почитать.
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 719
19.05.2014, 21:25  [ТС]     While срабатывает 2 раза, почему? #6
nmcf, а смысл? вопров другом, cout<<"|y|"; - это для наглядности, на самом деле у меня там куча кода которая по 2 раза вплняется
Тамика, а что с ним не так?
newbie666
Заблокирован
19.05.2014, 21:27     While срабатывает 2 раза, почему? #7
Цитата Сообщение от mh-coder Посмотреть сообщение
он выводит снова 1 букву
а он и выводит по одной букве на одно нажатие клавиши, у тебя просто руки трясутся - вот и щёлкаешь несколько раз по клавише
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 719
19.05.2014, 21:29  [ТС]     While срабатывает 2 раза, почему? #8
я тут заметил, если нажимаю например стрелочку, то 2 раза страбатывает, если букву то 1, как сделать чтобы при нажатии на стрелочку цыкл 1 раз срабатывал?
nmcf
4306 / 3727 / 1256
Регистрация: 14.04.2014
Сообщений: 14,599
19.05.2014, 21:39     While срабатывает 2 раза, почему? #9
Для таких клавиш первый байт должен быть ноль. Вот по нему и ориентируйся. Если ноль, то делай второй getch().
newbie666
Заблокирован
19.05.2014, 21:40     While срабатывает 2 раза, почему? #10
Цитата Сообщение от mh-coder Посмотреть сообщение
я тут заметил
дело в том, что:
getch () function returns two keycodes for arrow keys (and some other special keys)
то есть если ты нажимаешь специфическую виртуальную кнопку, функция по очереди возвращает два кода кнопки, для этого её два раза вызывать нужно - вот и две буквы вылезают у тебя в консоле.
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 719
19.05.2014, 21:41  [ТС]     While срабатывает 2 раза, почему? #11
а как сделать чтобы 1 была, вторая?
newbie666
Заблокирован
19.05.2014, 21:43     While срабатывает 2 раза, почему? #12
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от 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();       
    }
nmcf
4306 / 3727 / 1256
Регистрация: 14.04.2014
Сообщений: 14,599
19.05.2014, 21:46     While срабатывает 2 раза, почему? #13
Я подумал, что 0xE0 для getwch().
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 719
19.05.2014, 21:57  [ТС]     While срабатывает 2 раза, почему? #14
newbie666, клас, спс, то что нужно, а можешь только обьяснить как оно раотает? почеу цикл по 1 разу выводит букву и почему я ввожу клавишу 1 раз и результат нормальный могу взять из второго _getch()??
newbie666
Заблокирован
19.05.2014, 22:20     While срабатывает 2 раза, почему? #15
Цитата Сообщение от mh-coder Посмотреть сообщение
почеу цикл по 1 разу выводит букву
ну потому что там проверка есть, если сложна кнопка нажата, результат нажатия которой нужно выдаивать из гетчара два раза - то и вызывается второй вызов гетчара, что "подоить" поток ввода и вытащить оттуда всё. Иначе, при повторном заходе в вайл у юзера не спросят ввести символ, т
Цитата Сообщение от mh-coder Посмотреть сообщение
почему я ввожу клавишу 1 раз и результат нормальный могу взять из второго _getch()??
.к. в потоке остался одни символ от сложной кнопки и гетчар сразу вернёт остаток без всяких пауз.
ну потому что у составной клавиши сложной сам код как раз и идёт вторым байтом в тотоке
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2014, 22:25     While срабатывает 2 раза, почему?
Еще ссылки по теме:

Почему не срабатывает if, если истина? C++
Почему не срабатывает услоивие ни в одну ни в другую сторону C++
Почему не срабатывает EOF C++

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

Или воспользуйтесь поиском по форуму:
UnsKneD
алкокодер
 Аватар для UnsKneD
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
19.05.2014, 22:25     While срабатывает 2 раза, почему? #16
mh-coder, почитайте про отлавливание нажатий, про хуки(Hooks).
Yandex
Объявления
19.05.2014, 22:25     While срабатывает 2 раза, почему?
Ответ Создать тему
Опции темы

Текущее время: 00:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru