在同一行读取字符串和整数

时间:2013-03-25 19:56:05

标签: c++ io

我有一个要读取的数据文件,它有类似的东西

约翰1 2 3 4

我想阅读这些数据并执行一些功能,只是想确保我这样做。

while(myIn.peek()!=EOF)
{
getline(myIn, name, '/n');
myIn>>a>>b>>c>>d;
}

1 个答案:

答案 0 :(得分:1)

如果下一个字符不是文件结尾但是提取失败,你的代码就会搞砸了。这通常发生在文件的末尾,在结尾之前有额外的\n

您对getline的通话也有问题。 /n是一个多字节字符。大概你的意思是\n,但即便如此,行中的“约翰”之后也没有\n。相反,只需使用myIn >> name

无论如何,将你的提取用作while条件更为惯用。试试这个:

while (myIn >> name >> a >> b >> c >> d) {
  // Do something with them
}

如果任何提取失败,while循环的主体将不会执行。这意味着你可以在造成更多伤害之前快速离开。但是,在这里我们实际上并不关心每组值是否在一个单独的行上。它很乐意接受:

john 1 2 3 4 mary 5 6 7 8

另一种方法是首先用std::getline读取整行,然后你可以解析该行:

std::string line;
while (std::getline(myIn, line)) {
  std::stringstream line_stream(line);
  if (line_stream >> name >> a >> b >> c >> d) {
    // Do something with this line
  }
}

现在,即使一行格式错误,你仍然会继续前进到下一行,而不是全部放弃。