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)?
get()
返回每个字符。 getline()
扔掉了行终止符。
因为你的while(!fin.eof())
被破坏了(请参阅我在问题下的评论),当你实际上在文件末尾时,你尝试另一个输入操作,然后 EOF 在流上设置,但直到你尝试输入的变量被使用后才被选中。
这就是为什么您在最后一行打印两次st
:
1234 hijabcd efg1234 hij
getline()
确实从 st
中设置的值中删除了(换行符)分隔符,这就是为什么您的所有输出都出现在同一行上的原因。
对于get
版本,在EOF尝试读取将返回您打印的Traits::eof()
...可能会也可能不会明显显示某些内容,具体取决于您的实现选择的eof()
值和您的终端/控制台程序。