std :: getline从istream到string []多次空白

时间:2014-03-12 21:59:13

标签: c++ file buffer 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++;
    }
....

验证看起来像这样,它将IS存储在行中并进行一些测试并返回一个bool。 它工作得很好,但是这个构造函数中的第二个getline是空白的(没有存储在行中)。 如果我注释掉验证,它就可以了。 所以我猜这是getline和buffer的东西。我试图清除,但我对流不好。

如果有人猜测,那么!

主要

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 个答案:

答案 0 :(得分:1)

如果validation有一个while((std::getline(p_is, line[i]) && i < SIZE))循环,那么它获得的那些行就会从流中消失,并且getline不会直接在A::A中看到它。因此,getline()会返回false并且您的while循环退出,line[]处或之外的任何i元素仍然为空。

想要一个单独的验证功能是相对不寻常的...只是尝试读入将存储数据的变量,随时验证。

如果您决定单独进行验证,则可以在使用is.seekg(0)验证后查找文件的开头(请参阅here了解文档),甚至重新打开文件。