真的很简单c ++:运营商>>在fstream中读取内容后删除换行符?

时间:2012-05-31 23:19:26

标签: c++ fstream

// file.in
12
13

// main.cpp
fstream f("file.in", ios::in);
int n;
char c;
f >> n;
f.get(&c);

提取数字12后,下一个字符是什么?是换行还是'1'?如果我调用getline的getline,我会得到一个空行还是'13'?

1 个答案:

答案 0 :(得分:2)

它将分隔符留在输入缓冲区中,因此您读取的下一个字符将是一个换行符。但请注意,大多数提取器会在提取的任何内容之前跳过空格(包括new-line,因此,除非您调用类似getline的内容,否则通常不会可见。

编辑:要测试像ideone这样的内容,请考虑使用stringstream

#include <sstream>
#include <iostream>

int main(){ 
    std::istringstream f("12\n13");
    int n;
    char c;
    f >> n;
    f.get(c); // get takes a reference, not a pointer. Don't take the address.

    std::cout << "'" << c << "'";
    return 0;
}

我不希望看到stringstreamfstream之间存在差异。