所以我有这个构造函数

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并进行一些测试并返回布尔值。
它工作正常,但是此构造函数中的第二条getline为空白(行中未存储任何内容)。
如果我注释掉验证,它就可以了。
所以我想这与getline和buffer有关。我尝试清除,但对流不满意。

如果有人猜测,谢谢!

主要

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


验证文件

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

bool valide = false;

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

最佳答案

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

想要一个单独的验证函数是相对不寻常的……只是尝试读入将存储数据的变量,然后进行验证。

如果确定要单独进行验证,则可以在使用is.seekg(0)进行验证(请参见here获取文档)之后,搜索文件的开头,甚至重新打开文件。

关于c++ - std::getline从istream转换为string []多次为空白,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22364799/

10-15 16:38