2012-01-26 80 views
1

嗨,我是新來的C++和我正在尋找函數GetAsyncKeyState,我做了一個小應用程序來獲得「A」和「B」鍵如果按下名爲log.txt文件,它工作正常,但我有一個問題:GetAsyncKeyState和ofstream

我加了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; 
    } 
} 

回答

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