getline() 如何循环读取多行文件?
how does getline() read a multiple-line file in loops?
我对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 2
,然后在下一次迭代中读取 3 4
...那么,它如何知道在迭代开始时应该从哪一行开始读取?
文件流是字节(“字符”)的来源。每次您从文件中读取一个字符时,文件获取指针 都会前进到下一个要读取的字符。
也就是说,每次阅读,您都会得到下一个未读个字符。
std::getline()
简单地读取字符,直到它获得分隔符值(默认情况下为 '\n'
)。因此,每次调用 getline() 都会获取文件中的下一行。
我对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 2
,然后在下一次迭代中读取 3 4
...那么,它如何知道在迭代开始时应该从哪一行开始读取?
文件流是字节(“字符”)的来源。每次您从文件中读取一个字符时,文件获取指针 都会前进到下一个要读取的字符。
也就是说,每次阅读,您都会得到下一个未读个字符。
std::getline()
简单地读取字符,直到它获得分隔符值(默认情况下为 '\n'
)。因此,每次调用 getline() 都会获取文件中的下一行。