getline() 如何在循环中读取多行文件?

how does getline() read a multiple-line file in loops?

提问人:kaiyu wei 提问时间:1/13/2022 更新时间:1/13/2022 访问量:696

问:

我对 std::getline 函数的使用有些困惑。请参见以下代码:

#include <sstream>
#include <string>
std::ifstream ifs(filename);
std::string line;

while (std::getline(ifs, line))
{
  //...//
}

for ( std::string s; getline(ifs, s)){
  //...//
}

对于 while 循环和 for 循环,似乎每次在新的迭代中,“geline”都会读取一个新行,例如,如果我们有一个文件存储:

1 2
3 4
5 6

然后在第一次迭代中,getline 读取 ,然后在下一次迭代中...那么,当迭代开始时,它如何知道它应该从哪一行开始读取呢?1 23 4

C++ 函数 IOSTREAM IFStlet getLine

评论

0赞 Alan Birtles 1/13/2022
它从流的当前位置读取?
0赞 Thomas 1/13/2022
这是因为它从中读取。流(在本例中)是通过引用传递的,因此它始终引用更新的同一对象。ifs
0赞 mch 1/13/2022
在内部有一个索引来记住它在文件中的位置。ifstream

答:

2赞 Dúthomhas 1/13/2022 #1

文件流是字节(“字符”)的来源。每次从文件中读取一个字符时,文件获取指针都会前进到下一个要读取的字符。

也就是说,每次阅读时,您都会得到下一个未读字符。

std::getline()只需读取字符,直到它获得分隔符值(默认情况下)。因此,每次调用 getline() 都会获得文件中的下一行。'\n'