cin流和它的缓冲区的问题

Dic4000 2007-11-23 03:02:11
这几天研究cin对象,发现了许多忽略的小问题:
char ch='9';
int n;

cout.setf(ios_base::boolalpha);
while(cin>>ch)
{
//n=cin.tellg();
//cout<<"n="<<n<<"\t";
cout<<"ch="<<ch<<"\tcin.eof="<<cin.eof()<<endl;
}

测试1:保留代码中的注释,运行程序输入abcd并回车,程序结果和我预期的一样是:
ch=a cin.eof=false
ch=b cin.eof=false
ch=c cin.eof=false
ch=d cin.eof=false

测试2:放开注释,运行程序输入abcd并回车,程序结果是:
n=-1 ch=a cin.eof=false

问题1:对于测试2的结果不能理解,能否帮忙解释下?

问题2:程序运行到cin>>ch要求用户输入,输入完abcd按回车后,输入流缓冲区中一共有多少个字符?最后一个字符是EOF还是'\n',能否给出代码证明?

问题3:如果缓冲区中有EOF,cin流到底读不读EOF?是一旦读到EOF置eof标志,还是当读到EOF下一个字符时置eof标志?最好能给出代码证明.
...全文
85 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hai040 2007-11-23
  • 打赏
  • 举报
回复
下班了,mark
Dic4000 2007-11-23
  • 打赏
  • 举报
回复
对于问题1,n=-1 为什么会失败呢?
在循环中加一条语句:cout<<"cin.fail="<<cin.fail()<<endl;
显然这个失败应该不是流状态fail被置true引起的,那这是什么引起的fail?
xugang_2001 2007-11-23
  • 打赏
  • 举报
回复
1。 
Reports the current read position in the stream.


pos_type tellg( );


Return Value
The current position in the stream.

Remarks
If fail is false, the member function returns rdbuf -> pubseekoff(0, cur, in). Otherwise, it returns pos_type(-1).

2。我觉得缓冲区里的字符肯定是要多出一个字符标示是否结束。但是具体是什么不清楚

3。肯定要读到,否则怎么知道已经结尾了?

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧