我写了以下测试代码:
int main(int argc, char* argv[]) {
stringstream ss;
int num;
ss << "54321";
ss >> num;
ss.str("");
ss << "12345";
ss >> num;
fprintf(stderr, "%d\n", num);
}
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,结果是54321.如何使用提取运算符(>>)正确覆盖变量?
在第一次提取之后,您到达了流的末尾,因此已eofbit设置并且第二次提取失败.
int main(int argc, char* argv[]) {
stringstream ss;
int num;
ss << "54321";
ss >> num;
// eofbit was set above,
// we need to clear it
ss.clear();
ss.str("");
ss << "12345";
ss >> num;
fprintf(stderr, "%d\n", num);
}
Run Code Online (Sandbox Code Playgroud)
clear()在尝试第二次提取之前调用成员函数.第二个问题是内部get指针的位置,它不会自动重置.使用seekg()来设置.
编辑:删除线的东西是不是neccesary,解释在这里.