c++ - Printf Fprintf 输出顺序

标签 c++ printf output

我不明白为什么“cout”会在文件写入后输出,这对我来说毫无意义……我该如何正确执行?我尝试在两者之间 sleep ,但它仍然没有像我想要的那样颠倒顺序。

  cout << "Writing to file";
  fp = fopen("plume_visualisation.txt","w");
  for(int i=0;i<grid;i++)
    for(int j=0;j<grid;j++)
      for(int k=0;k<grid;k++)
    fprintf(fp,"%f\t%f\t%f\t%f\n",x[i],y[j],z[k],suv[i][j][k]);
  fclose(fp);

最佳答案

C++ 写入输出流,存储在缓冲区中。您需要刷新缓冲区以将其写入控制台。还记得您可能是如何学会向控制台写入一行的吗?

std::cout << "This is a message" << std::endl;

std::endl 所做的是在消息末尾放置一个换行符,并刷新缓冲区。根据您的代码,我猜您认为“嘿,我可以离开 endl,它不会写新行。”这是一个很好的思考方式……但您可能没有意识到 endl 也会刷新缓冲区。这就是你想要的:

std::cout << "Writing to file" << std::flush;

另请注意我如何在 cout 和 flush 前加上“std”。使用“使用命名空间标准”是您应该避免的不良做法。


与此相关,您已经在使用 C++。不是以 fprintf 的旧 C 方式执行文件 IO,而是设置文件流。它的工作方式与控制台 IO 的工作方式几乎相同。这是关于如何以更惯用的方式做你正在做的事情的很好的指南:http://www.cplusplus.com/doc/tutorial/files/

关于c++ - Printf Fprintf 输出顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50401654/

相关文章:

c++ - 将程序 A 的输出重定向到程序 B 的输入,反之亦然

c++ - 如何使用 Valgrind 确定 "still-available"内存泄漏的来源?

c++ - GraphicsScene 中的轴承公式计算产生不稳定的结果

python - 字符串格式化表达式 (Python)

c - Printf 参数顺序被忽略

java - 将每次运行后的输出更改为所有运行后的一个输出

c++ - 这篇 cppreference.com 文章的结尾有问题

c++ - winsock 无法连接到本地主机

java - System.out.printf 与 System.out.format

c++ - 打开 .dat 文件时遇到问题