【发布时间】:2014-12-19 18:20:47
【问题描述】:
我对流行为有疑问,请参阅以下示例。我期待的是 ss_char 和 ss_int 将是 eof 状态,但只有 ss_int 将是 eof 状态。
我的问题是,为什么不是 ss_char eof 状态? 不能用 operator>>,只用 istringstream::get() 函数,那为什么读取值成功呢?
输出:
字符值:a
整数值:42
ss_char eof: false // 为什么是假的?
ss_int eof: 真
对不起,我的英语很差。我正在努力提高我的英语水平。
#include <iostream>
#include <sstream>
int main(int /*argc*/, char const * /*argv*/[])
{
char c;
int num;
std::istringstream ss_int("42");
std::istringstream ss_char("a");
if (ss_char >> c)
{
std::cout << "char value: " << c << std::endl;
}
else
{
std::cout << "cannot read char" << std::endl;
}
if (ss_int >> num)
{
std::cout << "int value: " << num << std::endl;
}
else
{
std::cout << "cannot read int" << std::endl;
}
std::cout << std::endl;
std::cout << "ss_char eof: " << std::boolalpha << ss_char.eof() << std::endl; // why false
std::cout << "ss_int eof: " << std::boolalpha << ss_int.eof() << std::endl;
return 0;
}
【问题讨论】:
-
区别在于
ss_char只需要提取单个字符,而ss_int会继续扫描直到找到空格或文件结尾。
标签: c++