所以我的问题是,当我读取文件时,“ki”,“kivel”和“meddig”变量是好的,但是“mettol”变量似乎消失了。

struct Haboru {
    string ki;
    string kivel;
    int mettol;
    int meddig;
};

int main()
{
    Haboru haboruk[10];
    int k = 0;
    ifstream haboru;
    haboru.open("haboruk.txt");
    // The rows are in "haboruk.txt" like these:
    // Xhosa Zulu 1696 1736
    // Zulu Ndebele 1752 1782
    // Zulu Sotho 1756 1772
    while(!haboru.eof())
    {
        haboru >> haboruk[k].ki >> haboruk[k].kivel >> haboruk[k].mettol >> haboruk[k].meddig;
        k++;
    }
}

输出是这样的:

最佳答案

使用!file.eof()作为提取条件是不正确的。您必须执行提取,然后检查文件是否有效。但是即使以后再使用!file.eof()仍然不正确:

让我们通过为Haboru对象创建一个插入器来使其更简单:

std::istream& operator>>(std::istream& is, Haboru& haboruk)
{
    if (!is.good())
        return is;

    is >> haboruk.ki;
    is >> haboruk.kivel;
    is >> haboruk.mettol >> haboruk.meddig;

    return is;
}

然后,您可以创建 vector (或std::array C++ 11),并对每个元素使用插入器:
std::vector<Haboru> haboruks;
Haboru haboruk;

while (haboru >> haboruk)
{
    haboruks.push_back(haboruk);
}

要么...
std::vector<Haboru> haboruks((std::istream_iterator<Haboru>(haboru)),
                              std::istream_iterator<Haboru>());

关于c++ - 想要从文本文件读取整数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20035454/

10-14 14:49
查看更多