我遇到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;
}
我需要检查按键是否已被按下,但我不知道如何在每次按下按键时双重打印来解决此问题。
一些帮助?
答案 0 :(得分:4)
这是因为getch()
不仅会读取您输入的字符,还会读取新的换行符。
您确实将some_character
和\n
写入输入流。两者都是字符,都被读取。
在读取第一个字符后,您需要忽略其余的流。
另一件事可能是某些键生成两个字符代码"0 or 0xE0, and the second call returns the actual key code"。
你可以通过以下方式看到真正发生的事情:
#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);
}
这将打印读取内容的实际键码,以便您了解正在发生的事情。