为什么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

很明显,当试图将单词读入int变量时,"if"会失败。我的问题是,为什么它在被清除后第二次失败?

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

最新更新