2014-03-12 23 views
0

所以我有这个构造的std ::函数getline从istream转换成字符串[]多次空白

A::A(std::istream& is) 
{ 
if (validation(is)) 
{ 
    std::string line[SIZE]; 
    unsigned int i = 0; 

    while((std::getline (is, line[i])&& i < SIZE)) 
    { 
     i++; 
    } 
.... 

验证看起来是这样的,它存储的是符合并进行一些测试,并返回一个布尔值。 它工作得很好,但这个构造函数中的第二个getline是空白的(没有存储在行中)。 如果我评论验证,它工作得很好。 所以我想这是与getline和缓冲区。我试图清除,但我不擅长流。

如果有人有猜测,thx!

主要

ifstream myfile("file.txt"); 
A a(myfile); 

validation.cpp

bool validation(std::istream& is) 
{ 
string line[SIZE]; 
unsigned int i = 0; 

bool valide = false; 

while((std::getline(is, line[i])&& i < SIZE)) 
{ 
    i++; 
} 
.... 

回答

1

如果validationwhile((std::getline(p_is, line[i]) && i < SIZE))循环,它得到的线从流走了,不会被getline直接A::A可见。因此,getline()返回false并且您的while循环退出,并且i以上的任何line[]元素仍将为空。

想要一个单独的验证函数是相当不寻常的......只是尝试读入将存储数据的变量,并且随时进行验证。

如果你决心做单独验证,您可以用is.seekg(0)验证后寻求到文件的开始(见here的文档),甚至重新打开文件..

+0

谢谢你的快速答复! – Benoit

相关问题