非常简单的问题c ++

时间:2010-09-16 15:15:25

标签: c++ io

刚刚开始学习c ++,而且非常令人难以置信。它是一种令人惊叹的语言,但我在覆盖文件方面遇到了一些麻烦

#include <iostream>
#include <fstream>

using namespace std;

int main( )
{
    double payIncrease = 7.6;
    double annual;


    double annualIncrease;
    double newAnnual;

    double monthlyIncrease;
    double newMonthly;

    ifstream inStream;
    ofstream outStream;

//继承人问题在哪里

        inStream.open("annualSalary.txt" );
        outStream.open("newAnnualSalary.txt");

如果我将newAnnualSalary.txt更改为annualSalary.txt,我会得到一些非常奇怪的数字。 有谁知道为什么?

    inStream >> annual;
    inStream.close();
    double monthly = (annual/12);

    annualIncrease = ((annual/100)*payIncrease);

    monthlyIncrease = ((monthly/100)*payIncrease);


    newMonthly = (monthly + monthlyIncrease);
    newAnnual = (annual + annualIncrease);




    outStream <<"annual salary was: "<<  annual << "\n" ;  
    outStream <<"new annual salary is " << newAnnual << "\n ";
    outStream <<"new monthly salary is " << newMonthly <<"\n ";



    outStream.close();
    return 0;

}

我知道这是一个非常低技能水平的问题,但我只是在学习。

3 个答案:

答案 0 :(得分:9)

您无法同时打开与istream和ostream相同的文件。由于你很早就关闭了istream,为什么不在istream关闭后把ostream打开?或者,您可以使用允许读写的fstream。

答案 1 :(得分:6)

流类(在技术上,在本例中是basic_filebuf类)是缓存对该文件的读写。不保证不同的文件流同步。

使用单个fstream而不是两个单独的流到文件。

答案 2 :(得分:2)

这是因为ofstream的默认打开参数是ios::out,它会破坏文件的内容。这使得你的inStream对象将垃圾读入年度变量,因为它指向同一个文件,该文件只是将其内容销毁。因此你的怪异数字。

让inStream打开文件并读取内容,关闭它,然后打开outStream并写入。这应该可以解决问题,但最好确保在打开和销毁文件内容之前处理过程中不会出现问题。如果不这样做,您可能会遇到错误,并且文件中没有任何内容。基本上要确保在销毁之前的内容之前要写好数据。

要表明你正在做的事情会破坏文件:

#include <fstream>

using namespace std;
int main()
{
    ofstream x;
    x.open("ofTest.txt");
    x.close();
    return 1;
}

%> g++ test.cpp
%> cat ofTest.txt
Test file destruction
Test 1,2,3
%> ./a.out
%> cat ofTest.txt
%>