首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非常简单的io问题c++

非常简单的io问题c++
EN

Stack Overflow用户
提问于 2010-09-16 23:15:25
回答 3查看 356关注 0票数 8

今天刚开始学习c++,我很困惑。这是一门神奇的语言,但是我在改写一个文件时遇到了一些麻烦

代码语言:javascript
复制
#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;

//这里是问题所在

代码语言:javascript
复制
        inStream.open("annualSalary.txt" );
        outStream.open("newAnnualSalary.txt");

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

代码语言:javascript
复制
    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;

}

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-16 23:27:50

不能同时打开与istream和ostream相同的文件。既然你很早就关闭了istream,为什么不把ostream open调用放在istream close之后呢?或者,您可以使用允许读写的fstream。

票数 9
EN

Stack Overflow用户

发布于 2010-09-16 23:25:56

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

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

票数 6
EN

Stack Overflow用户

发布于 2010-09-16 23:25:42

这是因为ofstream的默认打开参数是ios::out,它会破坏文件的内容。这使得您的inStream对象将垃圾读取到年度变量中,因为它指向的是刚刚销毁其内容的同一个文件。所以才会有这么奇怪的数字。

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

要显示您正在执行的操作将销毁文件,请执行以下操作:

代码语言:javascript
复制
#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
%>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3728072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档