У меня проблема с циклом 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;
}
Мне нужно проверить, была ли нажата клавиша, но я не знаю, как решить эту проблему с помощью двойной печати при каждом нажатии клавиши.
Некоторая помощь?
Это потому что 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);
}
Это напечатает фактические коды клавиш того, что прочитано, так что вы увидите, что происходит.