電子書籍の厳選無料作品が豊富!

ofstream::getの動作がおかしいのです

#include <string>
#include <iostream>
#include <fstream>
using namespace std;
void main(void)
{
ifstreamifs;
ofstreamofs;
stringstr;
charc;
str="abc";
cout<<"before str: "<<str<<endl<<endl;
ofs.open("gomi");ofs<<str;ofs.close();
ifs.open("gomi");for(str="";ifs.eof()==0;str+=c)ifs.get(c);ifs.close();
cout<<"after str: "<<str<<endl<<endl;
}

の結果が

before str: abc

after str: abcc

になります
最後のcは何でつくのでしょうか?
回避する方法を教えてください

A 回答 (1件)

> for(str="";ifs.eof()==0;str+=c)ifs.get(c);



ifs.get(c) の(直前ではなく)直後に eofか否かを判定しなければいけないのでは?
    • good
    • 0
この回答へのお礼

おっしゃる通りです
str="";while(true){ifs.get(c);if(ifs.eof()!=0)break;str+=c;}
とすれば動きました
ということは終端に達してもすぐにはeofを出さずに一回無駄な空出しして初めてeofを出すみたいですね
不便な仕様ですが決まっていることなので文句を言っても始まらないですね
どうもありがとうございました

お礼日時:2003/01/29 01:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!