Ofstream не работает хорошо? - PullRequest
       13

Ofstream не работает хорошо?

1 голос
/ 01 декабря 2011

В этом коде fout является объектом ofstream, он предполагает запись в файл с именем output.txt. По причине output.txt всегда пусто! Я хотел бы спросить об ошибке, которую я сделал в коде:

#include<iostream>
#include<fstream>
#include<stdio.h>//to pause console screen
using namespace std;

double Volume(double);

int main() {
    ifstream fin; //read object
    ofstream fout;// writing object
    double Radius;
    fin.open("input.txt");
    fout.open("output.txt");
    if(!fin){
        cout<<"There a problem, input.txt can not be reached"<<endl;
    }
    else{
fin>>Radius;
fout<<Volume(Radius);
cout<<"Done! check output.txt file to see the sphare volume"<<endl;
    }

    getchar();//to pause console screen
return 0;
}

double Volume(double r){

double vol;
vol= (4.0/3.0)*3.14*r*r*r;
return vol;
}

Ответы [ 3 ]

5 голосов
/ 01 декабря 2011

"output.txt всегда пуст"

Я подозреваю, что вы не разрешаете fout сбрасывать вывод. Применимо ли какое-либо из этих утверждений к вам?

  • Вы проверяете содержимое «output.txt» после того, как getchar() вызывается, но до завершения программы?

  • Вы завершаете программу с помощью Ctrl + C ?

Если это так, вы не разрешаете записывать данные в fout. Вы можете решить эту проблему, избегая этих двух условий или выполнив одно из следующих действий:

  • Добавьте fout << endl после ввода данных или

  • Добавьте fout << flush после ввода данных или

  • Добавьте fout.close() после ввода своих данных.

3 голосов
/ 01 декабря 2011

Вы должны очистить поток, вызвать fout.flush() после того, как вы закончите вывод, все, что вы делаете, это создаете буфер, который еще не записан в файл. flush фактически помещает буфер в файл.

1 голос
/ 01 декабря 2011

В дополнение к звонку fout.flush() вы можете изменить:

fout<<Volume(Radius);

до

fout<<Volume(Radius) << std::endl; // Writes a newline and flushes.

или вы можете закрыть поток fout.close(), если он больше не требуется.

...