cin.getline()
1、多余规定字符串长度时,cin会出现失效位,可以通过cin.clear()清除,然后就正常读取后面的字符;
2、不接收回车或结束标志字符;
cin.get()
1、多余规定字符串长度时,cin不会出现失效位,而是将多余的存入读取缓冲区,再次调用cin.get()可以读取剩下的字符内容;
2、会接收回车或结束标志字符,可利用ch=cin.get()来接受结束字符;
getline(cin,str)
1、全局变量,与cin.getline()不同,与gets()相似,接收的字符串长度不受限制;不同之处是可以自定义结束符,直到你输入了回车或者你自己设定的结束符,str这个字符串才会被输出。
2、配合while(getline(cin,str)),可以一直接受字符串和换行符,直到遇到EOF和ctrl+z才会终止,故比较适合读取大量多行字符串;(这是因为你的回车只会终止getline()函数的读入操作。getline()函数终止后又进行while()判断(即判断输入流是否有效,你的输入流当然有效,满足条件),所以又运行getline()函数,导致程序永远跳不出循环。)
gets()
1、C中的函数。可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出;
2、与getline函数功能相似,但是不能自定义结束符,只能换行符结束;