1

我有一个问题,当用户按下某个键时,它会被转义。每次循环时,我都会将某个值增加 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;
}

我需要检查是否已按下键,但我不知道如何在每次按下键时通过双重打印来解决此问题。

一些帮助?

4

1 回答 1

4

这是因为getch()不仅会读取您输入的字符,还会读取新的换行符。

您实际上确实写入输入流some_character\n两者都是字符并且都被读取。

在读取第一个字符后,您需要忽略流的其余部分。

另一件事可能是某些键生成两个字符代码“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);
}

这将打印所读取内容的实际关键代码,因此您将看到发生了什么。

于 2014-06-11T13:40:05.173 回答