在文件写完之后,我不明白为什么"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)
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/