Printf Fprintf выходной порядок - PullRequest
0 голосов
/ 18 мая 2018

Не понимаю, почему вывод "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);

1 Ответ

0 голосов
/ 18 мая 2018

C ++ записывает в выходной поток, хранящийся в буфере. Вам нужно очистить буфер, чтобы записать его в консоль. Помните, как вы, вероятно, научились писать строки в консоли?

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

Что делает std :: endl, так это помещает символ новой строки в конец сообщения и очищает буфер. Исходя из вашего кода, я думаю, вы подумали: «Эй, я могу просто прекратить работу, и это не напишет новую строку». Это хороший способ думать ... но вы, вероятно, не понимали, что endl также очищает буфер. Это то, что вы хотите:

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

Также обратите внимание, как я поставил перед cout префикс «std». Использование «стандарта пространства имен» - это плохая практика, которую следует избегать.


В связанной заметке вы уже используете C ++. Вместо файлового ввода-вывода старый способ C fprintf, вместо этого настройте файловый поток. Он работает почти так же, как консольный IO. Вот отличное руководство о том, как делать то, что вы делаете, более идиоматическим образом: http://www.cplusplus.com/doc/tutorial/files/

...