Printf Fprintf outputorder

Ger*_*lio 2 c++ printf output

在文件写完之后,我不明白为什么"cout"输出,这对我没有意义......我怎么能正确地做到这一点?我尝试了两者之间的睡眠,但它仍然没有像我想的那样颠倒顺序.

  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);
Run Code Online (Sandbox Code Playgroud)

Amp*_*cid 5

C++写入输出流,存储在缓冲区中.您需要刷新缓冲区以将其写入控制台.还记得你是怎么学会在控制台上写一行的吗?

std::cout << "This is a message" << std::endl;
Run Code Online (Sandbox Code Playgroud)

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

std::cout << "Writing to file" << std::flush;
Run Code Online (Sandbox Code Playgroud)

还要注意我如何以cout为前缀并用"std"刷新.使用"使用命名空间标准"是您应该避免的不良做法.


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