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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
mh-coder
25 / 24 / 3
Регистрация: 01.02.2014
Сообщений: 781
#1

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

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

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

void main() {

while(true){

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

}

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

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

Почему не срабатывает EOF - C++
У меня стоит Visual Studio 2010 написал простенькую программу #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; int main() { int...

Почему не срабатывает инкремент? - C++
В комментарии показал вывод программы. Все переменные почему равны 2 Получается инкремент не оказывает никакого влияния? int a=0,...

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

Не срабатывает условие. Почему? - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int _tmain(int argc, _TCHAR* argv) { ...

Почему не срабатывает специализация шаблона? - C++
#include &lt;iostream&gt; #include &lt;clocale&gt; using namespace std; struct box { char mak; float m; float n; float y; float...

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

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

Почему не срабатывает конструктор копирования в пользовательском классе - C++
вроде со всем разобралась, но не заходит в конструктор копирования. В чём ошибка? #include &lt;iostream&gt; #include &quot;welcome.h&quot; ...

Непонятно почему каждый раз срабатывает исключение - C++
Почему-то кажддый раз срабатывает исключение invalid_argument, даже когда ввожу числа, удовлетворяющие условию #include &lt;iostream&gt; ...

Почему не срабатывает услоивие ни в одну ни в другую сторону - C++
mingw char S1=&quot;Hello&quot;; char S2={}; cin.getline(S2,255); if (S1==S2) cout&lt;&lt;&quot;OK&quot;; else cout&lt;&quot;NO&quot;; Не выводит...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.05.2014, 22:20
Ответ Создать тему
Опции темы

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