有关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()相同的是允许读取包含空格的字符串。它将继续读取,直到它读取至最大指定的字符数,或直到按下了回车键。第三个字符可以选择结束字符。