Ofstream不能很好用吗?

时间:2011-11-30 20:46:43

标签: c++ file fstream

在这段代码中,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 个答案:

答案 0 :(得分:5)

“output.txt始终为空”

我怀疑您不允许fout刷新其输出。这些陈述中的任何一个都适用于你吗?

  • getchar()之后检查“output.txt”的内容 调用,但在程序结束之前?

  • 使用 Ctrl + C 结束程序?

如果是这样,您就不允许将数据写入fout。您可以通过避免这两个条件或执行以下任一操作来解决此问题:

  • 在您填写数据后添加fout << endl,或

  • 在您填写数据后添加fout << flush,或

  • 撰写数据后添加fout.close()

答案 1 :(得分:3)

您必须刷新流,在完成输出后调用fout.flush(),您所做的只是构建一个尚未写入文件的缓冲区。 flush实际上将缓冲区放入文件中。

答案 2 :(得分:1)

除了致电fout.flush()之外,您还可以更改:

fout<<Volume(Radius);

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

或者如果不再需要,您可以关闭流fout.close()