想从文本文件中读取整数

Posted

技术标签:

【中文标题】想从文本文件中读取整数【英文标题】:Want to read integer from a textfile 【发布时间】:2013-11-17 20:01:49 【问题描述】:

所以我的问题是,当我读取文件时,“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++;
    

输出是这样的:

【问题讨论】:

在循环中添加一些调试打印,以在读取值时打印它们。然后,将该输出添加到问题中。 您好,感谢您接受我的回答!快速提问:我的代码对你有用吗? 【参考方案1】:

使用!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;

然后你可以创建你的向量(或std::arrayC++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>());

【讨论】:

以上是关于想从文本文件中读取整数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中读取文本文件?

如何转换从文本文件中读取的整数并存储为具有16位整数的二进制文件?

创建一个文本文件,读取并比较其中的整数

从文本文件中读取整数并使用 C++ 将它们存储到向量中

如何从 C++ 中的文本文件中逐行读取整数? [复制]

C++ 混乱。从文本文件中读取整数。转换为 ASCII