ifstream fin;
ofstream fout;
char ch;
string st;
fin.open("testfile.txt");
fout.open("testfile.txt");
while(!fin.eof())
{
fin.get(ch);
cout << ch;
}
fin.clear();
fin.seekg(ios::beg);
while(!fin.eof())
{
getline(fin, st);
cout << st;
}
测试文件包含以下内容:
abcd efg
1234 hij
结果:
abcd efg
1234 hijabcd efg1234 hij
我要问的是:
为什么读取与fin.get(ch)和。之间的结果不同 getline(fin,st)?
答案 0 :(得分:3)
get()
返回每个角色。 getline()
抛弃了行终结符。
答案 1 :(得分:0)
由于您的while(!fin.eof())
已被破坏(请参阅我在问题中的评论),当您实际位于文件末尾时,您会尝试其他输入操作,而EOF则是然后设置在流上,但直到之后您尝试输入的变量才被检查。
这就是你为最后一行打印st
两次的原因:
1234 hijabcd efg1234 hij
getline()
会从st
中设置的值中删除(换行符)分隔符,这就是为什么所有输出都会显示在同一行上的原因。
对于get
版本,在EOF上尝试阅读时会返回Traits::eof()
您打印的内容...可能会或可能不会显示某些内容,具体取决于您的实施选择的eof()
值你的终端/控制台程序。