c++ - 为什么不能在这个状态下执行 'ifstream'

标签 c++

#include <iostream>
#include <fstream>

using namespace std;

int main() {
    int a;
    char b;
    ifstream in("a.txt");

    if (!(in >> a))
        in >> b;
    if (!(in >> a))
        in >> b;
    in >> b;
    in >> b;

    cout << a;
    cout << b;
}//source code

5 a b c d e
//a.txt
  1. 如果文件中有一个 int 我想把它读作 int 和
  2. 如果文件中有一个字符,我想将其读取为字符。
  3. 为什么在尝试将 b 读取为 int 后无法读取 'char b'?

最佳答案

int 读取失败后 failbit流的设置。这会导致所有后续读取尝试失败。可以clear()尝试后续读取之前的错误。

请注意 operator>>(int&)将跳过前导空格。如果空格在您的应用程序中是有效字符,那么失败的 int 读取将产生不良副作用。如果文件是面向行的,那么另一种方法是使用 std::getline()stoi()处理数据。

关于c++ - 为什么不能在这个状态下执行 'ifstream',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23338917/

相关文章:

c++ - 将符号替换为表达式中的值并打印表达式

c++ - vector<unique_ptr<X>> v 出错

C++,改变地址指针指向(指向一个常量值)

c++ - 如何反转文本文件中的输出

javascript - 如何将标量乘法应用于四元数

c++ - 将条件转换为算术表达式

c++ - std::lists 的 std::vector 中的不可复制元素

c++ - 试图从函数返回 std::ifstream

C++ recvfrom 超时

c++ - while 循环中的智能指针测试 : use the comma operator?