为什么在读取混合数据时ifstream失败?

时间:2015-03-18 08:58:35

标签: c++ ifstream

我有一个包含单词和整数的文本文件。任务是只从中读取整数忽略单词。这是此类文件的示例:

seven 7

我声明一个int变量并尝试将ifstream读入其中(回显ifstream的状态):

#include <iostream>
#include <fstream>

int main() {
    int num = -1;
    std::ifstream ifs("file.in");

    std::cout << ifs << std::endl;
    ifs >> num;
    std::cout << ifs << std::endl;
    if ( ifs.fail() )
        ifs.clear();
    std::cout << ifs << std::endl;
    ifs >> num;
    std::cout << ifs << std::endl;

    std::cout << num << std::endl;

    return 0;
}

我得到了一个输出:

1
0
1
0
-1

很明显,&#39; ifs&#39;尝试将单词读入int变量时失败。我的问题是为什么在被清除后第二次失败?

1 个答案:

答案 0 :(得分:3)

第一次失败不会使流位置前进,因此第二次失败会再次尝试完全相同的结果。您需要跳过不需要的字词,将其读入字符串或使用ignore