我有一个要读取的数据文件,它有类似的东西
约翰1 2 3 4我想阅读这些数据并执行一些功能,只是想确保我这样做。
while(myIn.peek()!=EOF)
{
getline(myIn, name, '/n');
myIn>>a>>b>>c>>d;
}
答案 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
}
}
现在,即使一行格式错误,你仍然会继续前进到下一行,而不是全部放弃。