阅读在同一行

问题描述:

我有一个数据文件字符串和整数读取,它有这样的事情阅读在同一行

约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 
    } 
} 

现在,即使是格式错误的线路,你”我仍然会继续下一行,而不是一起放弃。

+0

好吧,数据文件有多行结构相同,我想读一行,执行一些函数,然后继续下一行。谢谢你的帮助! – 2013-03-25 20:02:59

+0

@JasonLee那么也许你会更喜欢第二种选择。当我逐行处理时,我喜欢它。 – 2013-03-25 20:19:17