1

我有这段代码用于从二进制文件或文本文件加载链表。它适用于文本文件,但它总是在二进制大小写中加载额外的行,所以我需要知道 getline 是如何工作的:

while(1)
{
     if(!file.good())
          break;

     getline(file,line);
     student.name=line;

     getline(file,line);
     student.phone=line;

     current->insert(student);
}
4

2 回答 2

3

它总是加载一个额外的行

当然:您正在插入已阅读的内容,但未验证是否成功阅读。

您需要在阅读尝试file.good()移动您的测试。

此外,无需good明确测试,结果getline已经为您提供了状态。从循环内的文件中加载简单数据的规范方法如下:

student_type student;
while (getline(file, student.name) and getline(file, student.phone))
    current->insert(student_type(student)); // Makes explicit copy!
于 2011-04-09T20:39:01.513 回答
2

getline() 读取 \n 或 EOF 终止的行。

所以在二进制文件中它没有多大意义。

提取字符直到提取 (n - 1) 个字符或找到分隔符(如果指定了此参数,则为 delim,否则为 '\n')。如果在输入序列中到达文件末尾或在输入操作期间发生错误,提取也会停止。

于 2011-04-09T20:37:58.707 回答