语句3执行了,1+空格+2+回车,则1、2两个整数都进入缓冲区,不是12
你可以输出一个换行就清楚了。
#include<iostream>using namespace std;
int main()
{
int a=0,b=0;
cin >>a; //语句1
cout <<a<<endl; //语句2
cin >>b; //语句3
cout <<b<<endl; //语句4
return 0;
}
判断合法性,如下:
#include<iostream>using namespace std;
bool IsInteger(char str)
{
if(str=='\0')
{
return false;
}
while(str!='\0')/如果字符串结束就跳出while循环/
{
if((str<'0')||(str>'9'))/判断字符是否是0-9以外的字符,是就返回false/
return false;
str++;/字符地址加1,这样下次str里就是下一个字符了/
}
return true;/如果没有数字以外的字符,证明这个字符串是一个整型,就返回true/
}
int main()
{
int a=0,b=0;
char str[50];
gets(str);
while(!IsInteger(str))
{
cout<<"非法输入,只能输入一个整数,请重新输入:";
gets(str);
}
a=atoi(str);
//cin >>a; //语句1
cout <<a<<endl; //语句2
cin >>b; //语句3
cout <<b<<endl; //语句4
return 0;
}
cin是输入 *** 作符,cin>>a的过程是先取得从键盘的输入值a,并将a赋给cin,因此while(cin>>a)的意思就是只要输入的值有效,那么就执行while体内的语句。
实例设计如下:
1、统计输入连续数字的个数,while循环结束 (跳出流对象)的时候,打印最后一个数 。通过检测其流的状态来判断结束;
(1)若流是有效的,即流未遇到错误,那么检测成功。
(2)若遇到文件结束符,或遇到一个无效的输入时(例如本题输入的值不是一个整数),istream对象的状态会变为无效,条件就为假。
2、执行结果如下(Z是按了ctrl的效果,为了结束执行):
不同的 *** 作系统有不同的约定,在windows系统中,输入文件结束符的方法是先按Ctrl+Z,然后再按Enter。在UNIX系统中,包括Mac OS X系统中,文件结束输入为Ctrl+D。
扩展资料:
while(cin>>a)的合法性:
运算符返回的是流对象的引用,cin是一个流对象,而>>运算符返回左边的流对象,也就是说cin>>val返回cin,于是while(cin>>val)就变成了while(cin),问题就变成了一个流对象在判断语句中的合法性。
不管是while(cin)还是if(cin),都是合法的。因为定义一个类,然后定义该类的对象,然后使用if语句来判断它是不合法的。这说明,流对象具有某种转换函数,可以将一个流对象转换成判断语句可以识别的类型。
打开iostreamh文件中operator void () const和bool operator!() const。这两个函数使得流对象可作为判断语句的内容。
operator void () const;函数在while(cin)或是if(cin)时被调用,将流对象转换成void类型。
bool operator!() const;函数在while(!cin)或是if(!cin)时被调用,将流对象转换成bool类型。
此外,这两个类型转换都是隐式的。
参考资料:
百度百科--cin(C++标准输入流)
当你在控制台输完数据敲回车后,输入的数据以及回车换行符被同时送到输入缓冲区,例如你输入的数据为a,然后回车,此时输入缓冲区中就有两个字符,一个是‘a’,一个是回车换行符‘/n’,接着程序读取,由于类型不匹配,读取失败,并没有读走输入缓冲区中的数据,也就是说,此时输入缓冲区中还是‘a’,和‘\n’,接着while循环继续读输入缓冲区,依然类型不匹配,于是就成了死循环
以上就是关于C++中cin的输入问题全部的内容,包括:C++中cin的输入问题、C++中while(cin>>a)是什么意思、关于C++输入cin的问题,下面的程序,如果输入的不合法,那就将陷入死循环,为什么如何理解求高人指点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)