在c ++中使用get()和getline()以不同方式处理换行符吗?

时间:2016-04-22 02:49:16

标签: c++

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)?

2 个答案:

答案 0 :(得分:3)

get()返回每个角色。 getline()抛弃了行终结符。

答案 1 :(得分:0)

由于您的while(!fin.eof())已被破坏(请参阅我在问题中的评论),当您实际位于文件末尾时,您会尝试其他输入操作,而EOF则是然后设置在流上,但直到之后您尝试输入的变量才被检查。

这就是你为最后一行打印st两次的原因:

1234 hijabcd  efg1234  hij

getline()会从st中设置的值中删除(换行符)分隔符,这就是为什么所有输出都会显示在同一行上的原因。

对于get版本,在EOF上尝试阅读时会返回Traits::eof()您打印的内容...可能会或可能不会显示某些内容,具体取决于您的实施选择的eof()值你的终端/控制台程序。