[英]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.