阅读在同一行
问题描述:
我有一个数据文件字符串和整数读取,它有这样的事情阅读在同一行
约1 2 3 4
我想读这些数据和执行某些功能,只是想确保我做对了。
while(myIn.peek()!=EOF)
{
getline(myIn, name, '/n');
myIn>>a>>b>>c>>d;
}
答
如果下一个字符不是文件结尾,但是提取失败,那么您的代码会搞砸。这通常发生在文件的末尾,在文件结尾处还有一个额外的\n
。
您在致电getline
时也有问题。 /n
是一个多字节字符。推测你的意思是\n
,但即使如此,行中的“john”后面也没有\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
}
}
现在,即使是格式错误的线路,你”我仍然会继续下一行,而不是一起放弃。
好吧,数据文件有多行结构相同,我想读一行,执行一些函数,然后继续下一行。谢谢你的帮助! – 2013-03-25 20:02:59
@JasonLee那么也许你会更喜欢第二种选择。当我逐行处理时,我喜欢它。 – 2013-03-25 20:19:17