C++中cin的输入问题

C++中cin的输入问题,第1张

语句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的问题,下面的程序,如果输入的不合法,那就将陷入死循环,为什么如何理解求高人指点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10078385.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存