2011-11-02 111 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