我有一个简单的C ++程序,用于将按下的键存储在文件中。
有效的方法是prinf
将其显示在控制台中,但是fprintf
将其保存在文件中将不起作用。
即使fprintf(logx, "TEST");
也只有在我删除循环时才起作用。
我的代码:
int main(){
char c;
FILE *logx;
logx = fopen("mylog2.txt", "w");
fprintf(logx, "TEST");
while (true)
{
Sleep(10);
for (int i = 8; i <= 255; i++)
{
if (GetAsyncKeyState(i) == -32767)
{
switch(i) {
case 96:
fprintf(logx, "%d", 0);
break;
case 97:
fprintf(logx, "%d", 1);
break;
case 98:
fprintf(logx, "%d", 2);
break;
case 99:
fprintf(logx, "%d", 3);
break;
case 100:
fprintf(logx, "%d", 4);
break;
case 101:
printf("%d", 5);
break;
case 102:
printf("%d", 6);
break;
case 103:
printf("%d", 7);
break;
case 104:
printf("%d", 8);
break;
case 105:
printf("%d", 9);
break;
default:
c = char(i);
printf("%c", c);
break;
}
}
}
}
return 0;
}
按所有可能的数字后文件为空。甚至没有将TEST写入文件中(当删除循环时,将打印“ TEST”)。
答案 0 :(得分:2)
您必须以某种方式终止循环。如果使用Ctrl-C终止程序,则不会清除FILE
I / O缓冲区,并且文件将为空。
或者,您可以在每个单独的fflush(logx);
语句后放置一个fprintf()
,以将数据强制输出到文件中。但这只是最后的选择,因为它会使文件I / O非常慢。
您还应该在循环后关闭文件:
fclose(logx);