有关C++ cin,cin.get()和cin.getline()

cin:

对于cin操作符,由于它是忽略所有“不可见”字符的(比如说“\n”),所以无法输入像“hello word”这样的字符串,注意是忽略而不是不读,缓冲区里还是有的,也就是说,调用一次cin后,缓冲区里还有一个“不可见”字符,这会导致一些麻烦接下来讨论。

cin.get():

可以不接收参数,接收一个参数cin.get(传值的对象),接收两个参数cin.get(传值地址,最大的传输字符数max_size),实际能输入的字符数为max_size-1,因为还有一个“\0”。用户通过按下“\n”来实现输入结束,不忽略其他字符。当输入的字符数过多,将会停留在缓冲区中。

我们考虑如下的代码

char str[3],str1[3];
cin>>str;
cin.get(str1,3);

当我们输入d r\n(注意中间的空格)执行后你后发现程序不等你输入str1的值就直接结束了,这是因为前面的cin操作将一个“ ”留在了缓冲区,而cin.get()可以接收“ ”,当缓冲区有字符时是不需要从键盘输入的。这种情况下你可以选择将缓冲区的字符多读出来while(cin&&cin.get()!='\n')continue;或者cin.sync()清空缓冲区之所以这里使用一个while循环是基于这样的另外一种情况如下:

char str[3],str1[3];
cin.get(str,3);
//while(cin&&cin.get()!='\n')continue;
cin.get(str1,3);

看似和上面的问题是一样的,其实有一些差别,那就是cin.get(传值地址,最大的传输字符数max_size)他只会从缓冲区里面读取max_size-1个字符,这样,我们就必须将剩余多的字符清空。

cin.getline()

接收两个字符时cin.getline ()与cin.get()相同的是允许读取包含空格的字符串。它将继续读取,直到它读取至最大指定的字符数,或直到按下了回车键。第三个字符可以选择结束字符。

 

posted @ 2020-04-29 16:41  ElvisHUSTer  阅读(268)  评论(0编辑  收藏  举报