C++初学者的疑问,while(cin>>a)

#include<iostream>usingnamespacestd;intmain(){inta;while(cin>>a){cout<<cin.eof()<<end... #include<iostream>
using namespace std;
int main()
{
int a;
while(cin>>a)
{
cout<<cin.eof()<<endl;
cout<<cin.fail()<<endl;
cout<<cin.bad()<<endl;
}
cout<<cin.eof()<<endl;
cout<<cin.fail()<<endl;
cout<<cin.bad()<<endl;
}为什么输入1 2 EOF,输入1 2 ctrl z,照道理来说因为已经到了文件结尾,可是变成1的竟然是failbit,为什么不是endbit置1,呢?哪位高手指点一下迷津?感激涕零啊!(我用的是codeblocks)
展开
 我来答
Adol1111
推荐于2016-11-04 · TA获得超过948个赞
知道小有建树答主
回答量:218
采纳率:0%
帮助的人:330万
展开全部

你的a 类型有点问题,他不能接受整数以外的类型,所以cin>>a这句在接受到EOF、ctrl+z都会失败,所以就只有fail有效。而且正常输入的EOF是字符串,并非是结束符eof,只有ctrl+z才有效。

#include<iostream>
#include <string>
using namespace std;
int main()
{   
string a;   
while(cin>>a)
{      
cout<<cin.eof()<<endl;   
cout<<cin.fail()<<endl;      
cout<<cin.bad()<<endl;

cout<<cin.eof()<<endl; 
cout<<cin.fail()<<endl;     
cout<<cin.bad()<<endl;
system("pause");
return 0;
}

追问

谢谢你的回答,你说的很有道理,我还想问是不是EOF,eof都只是普通字符串,没有文件结束符的功能呢?我试了eof,对你的程序来说三个都有效

追答
我的程序中,我定义的a本身就是一个字符串,所以你说的那些当然会认为是字符串了。但即使你不定义成字符串,系统也不会认为eof会是系统命令。

你输入的时候,任意字符(除了那些系统定义过的输入,比如ctrl+z)都只会作为普通字符或数字进行处理,并不会作为特殊的字符处理。而且EOF是文件的结束符,除了系统规定的操作,cin是不可能得到该值的...一般正常情况下,也是在读取文件的时候,会取得该值,或者直接赋予某个变量,EOF的ascii码。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式