0

我无法理解为什么在函数后打印换行符(std::endl\n)会getline显示意外行为。让我在下面的代码和输入文本文件之后描述问题:

代码:

int  main()
{
    std::string filename("./text_file.txt");
    std::ifstream input_file;
    input_file.open(filename);
    std::string line;

    while (getline(input_file, line, '-'))
    {
        std::cout << line << std::endl;
        getline(input_file, line, '-');
        std::cout << line << std::endl;
        std::cout << std::endl;
    }
    input_file.close();
}

输入文本文件(text_file.txt):

kc-qy
qy-FN
kc-ZP
end-FN

我打算做的是

  1. 获取输入文件,
  2. 在不同的行上打印由连字符连接的字母,( getline(input_file, line, '-'))
  3. 在你对输入文件的下一行做同样的事情之前,放一个换行符 ( std::cout << std::endl)。

简而言之,我期望打印的代码是

kc
qy

qy
FN

kc
ZP

end
FN

而我得到:

kc
qy
qy

FN
kc
ZP
end

FN
FN

我的理解是getline逐行读取输入文本文件(好吧,函数的名称是get“line”),所以如果我把'-'它作为分隔符,它应该用连字符分隔文本中的每一行。

任何帮助将不胜感激。

PS我是C ++的新手,因此除了解决方案之外的任何其他评论都将不胜感激(例如我应该使用std::endl代替\n,或关于代码设计等)

4

0 回答 0