【问题标题】:How does getline() work?getline() 是如何工作的?
【发布时间】:2011-04-09 20:28:15
【问题描述】:

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

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

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

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

     current->insert(student);
}

【问题讨论】:

  • “它适用于文本文件,但它总是在二进制情况下加载额外的一行”对不起,wwwhat?

标签: c++ getline


【解决方案1】:

它总是加载一个额外的行

当然:您正在插入您已阅读的内容,而没有验证它是否已成功阅读。

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

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

student_type student;
while (getline(file, student.name) and getline(file, student.phone))
    current->insert(student_type(student)); // Makes explicit copy!

【讨论】:

  • @Ahmed 那么在这种情况下,您的文本文件包含操作系统以外的行尾字符。
【解决方案2】:

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

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

字符被提取,直到 (n - 1) 个字符已被提取 或找到分隔符 (如果这个参数是 delim 指定,否则为 '\n')。这 提取也停止,如果结束 在输入序列中到达文件 或者如果在输入过程中发生错误 操作。

【讨论】:

  • 同意。如果这确实是一个二进制文件,那么找到换行符并没有任何意义——它只是意味着用于该类型文件的编码产生了 0xD 0xA 或 0xA。
猜你喜欢
  • 2016-12-06
  • 1970-01-01
  • 2014-03-06
  • 2019-10-21
  • 2016-04-25
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多