GetAsyncKeyState和ofstream

时间:2012-01-26 15:01:36

标签: c++

您好我是C ++的新手,我正在寻找功能GetAsyncKeyState,我做了一个小应用程序,如果按下名为log.txt的文件中的“A”和“B”键,它工作正常,但我有一个问题:

我添加了endl;在每个if语句中,所以它结束行并转到第二行并添加下一个字母,但是当我删除endl时;它没有放任何字母>> (我删除了endl;因为我希望所有字母都在同一行中)

#include <iostream>
#include <windows.h>
#include <fstream>
using namespace std;
int main ()
{
    ofstream logfile("log.txt", ios::out | ios::ate | ios::app);

    while (true)
    {
        Sleep (100);
        if (GetAsyncKeyState(0x41))
            logfile << "a" << endl;
        if (GetAsyncKeyState(0x42))
            logfile << "b" << endl;
    }
}

1 个答案:

答案 0 :(得分:2)

endl做了两件事。它在输出流中添加换行符,然后将其刷新。冲洗是让您立即看到结果的原因。您可以在没有换行符的情况下手动调用flush,如下所示:

logfile.flush();

另外,当你调用GetAsyncKeyState时,你应该过滤掉除最高位之外的所有内容,如下所示:

if (GetAsyncKeyState('A') & 0x8000)

阅读“返回值”下的文档,了解原因:http://msdn.microsoft.com/en-us/library/windows/desktop/ms646293%28v=vs.85%29.aspx