C ++ Do循环在打印时保持倍增值

时间:2014-06-11 13:34:41

标签: c++ loops getch

我遇到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 个答案:

答案 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);
}

这将打印读取内容的实际键码,以便您了解正在发生的事情。