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)
确实奇怪。回去研究了一下发现 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:微软就爱把一些东西弄得神神秘密的。
其实也不是上面那位说的那样复杂, cin.get(c);//它可以接受所有的字符(空格....) //cin>>c;它忽略空格,遇空格就不输入了! 就是这样啊!
答:cin.get()表示从键盘读入一个字符,为了让我们能够看得清楚结果详情>>
问:挺简单的一C函数,不过我是初学者,暂时还不会写,请好心人多多帮忙!
答:int mystrlen(char *str) { int n = 0; while (*str) { n++; str++;} return n; } voi...详情>>