提问者:小点点

fstream期间忽略空行


编写程序读取文本文件并将其存储在结构中。 文本文件示例:

chicken

dog

car


765

当行中有一些文本时,它将被存储到结构中。 我尝试了以下操作:

getline(file, aLine);
Info.animalchicken = aLine;

getline(file, aLine);
Info.animaldog = aLine;

getline(file, aLine);
Info.car = aLine;

getline(file, aLine);
Info.number = aLine;

我意识到getline实际上是获取每一行。 当我在我的程序中运行这个时,鸡将被存储在结构info.animalchicken中。 下一行为空,将存储到info.animaldog中。 Dog将存储在info.car等中。

我认为这里需要一个控制循环,但我想不出一个好的。 我怎样才能忽略空行,这样我的文本才能正确地进入结构?

这是我的结构

struct Info {
    string animalchicken;
    string animaldog;
    string car;
    int number;
}

共1个答案

匿名用户

循环的思想,虽然相当原始,但应该起作用; 最简单的方法是将逻辑包装在一个单独的函数中:

std::string getlineFilterEmpty(std::istream& s) {
    std::string line;

    do {
        if (!s) {
            throw std::runtime_error("End of stream");
        }
        getline(s, line);
    } while(line[0] == '\n');

    return line;
}

那么获取您的值就很简单:

Info.animalchicken = getlineFilterEmpty(file);
Info.animaldog = getlineFilterEmpty(file);
Info.car = getlineFilterEmpty(file);

number成员需要将字符串解析为整数,您可以在so的其他位置找到该字符串的代码。