爱问知识人 爱问教育 医院库

EOF的问题,高分悬赏

首页
cin二级

EOF的问题,高分悬赏

请问cin>>和cin.get()对EOF的处理机制有什么不同?

#include<iostream>
#include<iostream>
using namespace std;
int main()
{
    char c;
         while(!cin.eof())
    cin.get(c);//cin>>c;
    return 0;
}
采用cin.get()的时候运行时输入一个^Z程序就结束了。而采用cin>>的时候,输入^Z按回车程序并不结束,可以继续输入,除非紧接着又输入了一个^Z,程序才结束,太奇怪了!(VC++6.0) 

提交回答
好评回答
  • 2006-05-06 10:34:38
      确实奇怪。回去研究了一下发现 t()和cin>>中对istream::sentry的调用不同sentry原形:classsentry{ (_Myt&_Is,bool_Noskip=false):_Ok(_Is。ipfx(_Noskip)){}operatorbool()const{return(_Ok);} t()的是sentry_Myis(_Is,true);cin>>的是sentry_OK(_Is);//默认第二项为false当第二项为false时多执行了下面这段程序if(!_Noskip&&flags()&skipws){const_Ctype&_Fac=_USE(getloc(),_Ctype);_TRY_IO_BEGINint_type_C=rdbuf()->sgetc();while(!_Tr::eq_int_type(_Tr::eof(),_C)&&_ (_Ctype::space,_Tr::to_char_type(_C)))_C=rdbuf()->snextc();_CATCH_IO_END}就是多做一次检查而已cin>>先读入字符,所以若输入ctrl+z的异常则sentry(_Is,false);让io缓冲中存EOF。
      之后cin>>调用_I。
      rdbuf()->sbumpc();从缓冲中取字符时发现是EOF就会重新让你输入个字符(以为缓冲去没东西??)其实只要将sentry_OK(_I)改为sentry_OK(_I,true)cin>>就和 t一样了ps:微软就爱把一些东西弄得神神秘密的。

    s***

    2006-05-06 10:34:38

其他答案

    2006-05-07 20:44:25
  • 其实也不是上面那位说的那样复杂,
    cin.get(c);//它可以接受所有的字符(空格....)
    //cin>>c;它忽略空格,遇空格就不输入了!
    就是这样啊!

    1***

    2006-05-07 20:44:25

类似问题

换一换
  • C/C++ 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 175-194
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):