fprintf中不会带开关/ case语句用C ++工作

问题描述 投票:0回答:1

我有一个简单的C ++程序存储在文件中碰到按键。什么工作是prinf显示它在控制台,但fprintf将其保存在文件将无法正常工作。甚至当我while循环删除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被写入文件时(当while循环被删除“TEST”打印)。

c++ switch-statement printf
1个回答
2
投票

你必须以某种方式终止循环。如果你用Ctrl-C终止程序的FILE I / O缓冲区将不会被刷新,您的文件将是空的。

或者,你可以把一个fflush(logx);每一个人fprintf()句话背后给力的数据输出到文件中。但这只是不得已而为之,因为它使文件I / O速度很慢。

你也应该关闭该文件在循环后:

fclose(logx);
© www.soinside.com 2019 - 2024. All rights reserved.