{
char ch;
//运行程序,直接回车,无论执行下面哪一句代码后发现ch的值是10,即换行符\n (下面两句代码值能执行一句对比结果)
cin.get(ch);//ch=cin.get();
}
int main()
{
char str[10],ch;
cin.get(str,10);
//运行程序,直接回车(下面两句代码值能执行一句对比结果)
//cin.get(ch); //若执行这一句,执行完以后发现ch的值为-52,即未初始化
ch=cin.get(); //若执行这一句,执行完以后发现ch的值为-1,即输入流已经读取到流尾
/*
之所以出现上面的情况,是因为使用cin.get(str,10)读取空行后将设置失效位(即cin.fail()为1,cin.eof()仍未0),使接下来的输入被阻断
*/
}
int main()
{
char str[10],ch;
cin.get(str,10);
cin.clear();//如果加上这一句,发现下面两句任何一句执行以后,ch的值为10,即'\n',这是因为cin.clear()恢复失效位。
//运行程序,直接回车(下面两句代码值能执行一句对比结果)
//cin.get(ch); //若执行这一句,执行完以后发现ch的值为-52,即未初始化
ch=cin.get(); //若执行这一句,执行完以后发现ch的值为-1,即输入流已经读取到流尾
}
第一种
char str1[5];
cin.getline(str1,5); //输入5个或5个以上的字符,下面输出0,1
cout<<cin.eof()<<","<<cin.fail()<<endl;
第二种
char str1[5];
cin.get(str1,5); //输入回车,下面输出0,1
cout<<cin.eof()<<","<<cin.fail()<<endl;
下面一段代码:
char str1[5],str2[5],ch;
cin.getline(str1,5);//输入超过4个字符,回车,再输入4个字符,发现运行结果正确。
//下面5行代码是清空缓冲区的
if(cin.fail())
{
cin.clear();
}
while((ch=cin.get())!='\n'&&ch!=EOF);
cin.getline(str2,5);
cout<<str1<<","<<str2<<endl;
return 0;