簡體   English   中英

非常簡單的問題c ++

[英]very simple io question c++

剛剛開始學習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;

}

我知道這是一個非常低技能水平的問題,但我只是在學習。

您無法同時打開與istream和ostream相同的文件。 由於你很早就關閉了istream,為什么不在istream關閉后把ostream打開? 或者,您可以使用允許讀取和寫入的fstream。

流類(在技術上,在本例中是basic_filebuf類)是緩存對該文件的讀寫。 不保證不同的文件流是同步的。

使用單個fstream而不是兩個單獨的流到文件。

這是因為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
%>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM