Цикл C ++ Do продолжает удваивать значение при печати

У меня проблема с циклом do while, который сбрасывается при нажатии пользователем клавиши. Я увеличиваю некоторое значение на 1 каждый раз, когда оно зацикливается. Но когда я печатаю это значение (после каждого нажатия клавиши), оно печатается два раза.

Код как ниже:

#include <iostream>
#include <windows.h>
#include <conio.h>

using namespace std;

int main () {

int x = 0;
char asd;

do {
x++;
asd = getch();
cout << x << " ";
} while(asd!=27);
system("pause");
return 0;
}

Мне нужно проверить, была ли нажата клавиша, но я не знаю, как решить эту проблему с помощью двойной печати при каждом нажатии клавиши.

Некоторая помощь?

1

Решение

Это потому что getch() читает не только введенный вами символ, но и новую строку.

Вы действительно пишете some_character а также \n во входной поток. Оба персонажа и оба читаются.

Вам нужно игнорировать остальную часть потока после чтения 1-го символа.

Другое дело, что некоторые ключи генерируют двухсимвольные коды «0 или 0xE0, и второй вызов возвращает фактический код ключа».

Вы можете увидеть, что на самом деле происходит с чем-то вроде этого:

#include <iostream>
#include <windows.h>
#include <conio.h>

using namespace std;

int main () {
int x = 0;
char asd;
do {
x++;
asd = getch();
cout << "Character code read: " << int(asd)
<< ", character count:" << x << "\n";
} while(asd!=27);
}

Это напечатает фактические коды клавиш того, что прочитано, так что вы увидите, что происходит.

4

Другие решения


По вопросам рекламы [email protected]