您的位置:首页 > 编程语言 > C语言/C++

C++学习笔记001-关于cin的几个用法

2015-04-09 10:44 931 查看
cin与scanf一样,都建立程序输入的缓冲区,在一次输入过程中,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入。1. cin>>
<span style="font-size:14px;">#include<iostream>using namespace std;int main(){	char str[50],ch1;	cout<<"Please input a string: ";	cin>>str;	ch1=getchar();        cout<<str<<" "<<(int)ch1<<endl;		system("pause");	return 0;}</span>
运行结果为:由运行代码可以知道cin在向str输入时,遇到回车/空格等字符停止输入,这个回车/空格依然在缓冲区中,所以当getchar()获取字符时,得到了回车符(ASCII码打印出10)当一开始输入的是(空格)(空格) abcde 时,这些空格都会被读取并丢弃,最终str打印出的是abcde,而ch1打印出的依然是回车符的ASCII值2. cin.get()与cin.getline()
<span style="font-size:14px;">#include<iostream>using namespace std;int main(){	char str[50],ch1;	cout<<"Please input a string: ";	cin>>str;	ch1=cin.get(); //等价于cin.get(ch1);        cout<<str<<" "<<(int)ch1<<endl;		system("pause");	return 0;}</span>
由上图可知,cin>>不能读取回车/空格符,但是cin.get()可以读取它们另外cin.get()还可以读取字符串:
<span style="font-size:14px;">#include<iostream>using namespace std;int main(){	char str[50],ch1;	cout<<"Please input a string: ";	cin.get(str,5);	cin.get(ch1);  //等价于ch1=cin.get();	cout<<str<<" "<<(int)ch1<<endl;		system("pause");	return 0;}</span>
cin.get(str,5); 向str写入了4个字符,最后一个留给‘\0’,如果写入了超过4个字符,比如写入了abcde,再按回车,那么最终打印出来的还是abcd,而它下面的函数cin.get(ch1),得到的是字母e注意到:输入abcd后按回车,程序直接打印出abcd 和回车的ASCII码,说明回车起到了结束输入的作用,但是这个回车符依然在缓冲区中,所以下次调用cin.get()时,会把回车符取出另外:cin.get(str,5)也是可以读取空格符的,只是回车不能读下图显示了cin.get()与cin.getline()的区别:cin.getline(str,5);用法与cin.get(str,5);是一致的,但是,当输入abcd时,按下回车,并没有直接输出程序结果,而是我又输入了一个a后再按回车才打印出运行结果,说明:abcd按下回车,命令停止向str输入,但这个回车符并不像cin.get()那样仍然保留在缓冲区中,而是cin.getline()把它拿走并丢弃了,所以要再向缓冲区输入数据,如a。这就是get与getline的一个区别此外,见下图:当输入多于4个字符时,如输入了abcdfe 在cin.get(); 情况下,应当输出: abcd 102(f的ASCII码)但是如图输出了-52,这是无意义的数字,说明当getline获得超出要求数目的字符后,后面的都会丢弃,变得无意义,不会留给接下来的调用。这就是cin.get()与cin.getline()第二个区别

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: