std :: getline从iStream中直至字符串[]多次空白

std::getline from istream into string[] multiple times blank

本文关键字:空白 字符串 getline iStream std      更新时间:2023-10-16

所以我有这个构造函数

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和huffer的东西。我试图清除,但我对流不好。

如果有人有猜测,thx!

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

验证.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++;
}
....

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

需要一个单独的验证功能是相对不寻常的...只需尝试阅读将存储数据的变量,随着您的使用而进行验证。

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