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) 展开
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) 展开
展开全部
你的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;
}
追答
我的程序中,我定义的a本身就是一个字符串,所以你说的那些当然会认为是字符串了。但即使你不定义成字符串,系统也不会认为eof会是系统命令。
你输入的时候,任意字符(除了那些系统定义过的输入,比如ctrl+z)都只会作为普通字符或数字进行处理,并不会作为特殊的字符处理。而且EOF是文件的结束符,除了系统规定的操作,cin是不可能得到该值的...一般正常情况下,也是在读取文件的时候,会取得该值,或者直接赋予某个变量,EOF的ascii码。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询