fprintf无法在C ++中使用switch / case语句

时间:2019-02-09 20:22:41

标签: c++ switch-statement printf

我有一个简单的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”)。

1 个答案:

答案 0 :(得分:2)

您必须以某种方式终止循环。如果使用Ctrl-C终止程序,则不会清除FILE I / O缓冲区,并且文件将为空。

或者,您可以在每个单独的fflush(logx);语句后放置一个fprintf(),以将数据强制输出到文件中。但这只是最后的选择,因为它会使文件I / O非常慢。

您还应该在循环后关闭文件:

fclose(logx);