【问题标题】:fprintf wont work with switch/case statement in C++fprintf 不适用于 C++ 中的 switch/case 语句
【发布时间】:2019-02-09 20:22:41
【问题描述】:

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

感谢任何帮助或提示。

【问题讨论】:

  • 尝试关闭文件,否则它仍然处于打开状态,并且可能不会出现文字。 fclose(logx);应该做的伎俩
  • @FrAxl93 仍然无法正常工作。
  • 1.您应该检查fopen 是否成功。 2.输出通常是缓冲的;您可能希望使用fflush(logx) 显式刷新您的输出(尽管fclose(logx) 也会先刷新挂起的写入)。如果这仍然不起作用,请发布包含fflush 和/或fclose 的代码。
  • 如果 TEST 未打印,请删除其余代码并找出原因。在您知道如何编写 TEST 之前,没有必要再看其余的代码。确保您拥有正确的目录,并且没有写入计算机上其他地方的 mylog2.txt 文件..
  • 感谢我很好地添加了flush和fclose,但似乎有帮助的是用X关闭程序而不是Visual Studio中的红色方块停止。当我用 X 关闭程序时,所有内容都保存在文件中。当停止时,什么都没有保存并且文件是空的。对不起,如果是初学者的错误。

标签: c++ switch-statement printf


【解决方案1】:

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

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

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

fclose(logx);

【讨论】:

  • 我把 fflush(logx) 放在 for 循环的末尾。效果很好,谢谢:)
猜你喜欢
  • 2021-12-15
  • 1970-01-01
  • 2013-09-24
  • 1970-01-01
  • 2018-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多