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

来源:互联网 发布:单片机lcd12864 编辑:程序博客网 时间:2024/06/04 17:39

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()第二个区别


                                             
0 0
原创粉丝点击