cin.get() ,cin.getline()的区别
程序员文章站
2022-04-15 12:12:15
...
<strong>cin.get() ,cin.getline()的区别</strong>
分为三种情况来看:
1)输入的字符串不超过限定大小
get(str,Size):读取所有字符,遇到'\n'时止,并且将'\0'和'\n'留在输入缓冲区中,其将被下一个读取输入的操作捕获,影响该输入处理;
getline(str,Size):读取所有字符,遇到'\n'时止,并且将'\n'直接从输入缓冲区中删除掉,不会影响下面的输入处理。
1)输入的字符串不超过限定大小
get(str,Size):读取所有字符,遇到'\n'时止,并且将'\0'和'\n'留在输入缓冲区中,其将被下一个读取输入的操作捕获,影响该输入处理;
getline(str,Size):读取所有字符,遇到'\n'时止,并且将'\n'直接从输入缓冲区中删除掉,不会影响下面的输入处理。
如果你定义了别的终止符,比如getline(str,Size,'a'),输入以a结尾的字符串,则'\0'和'\n'也会留在输入缓冲区中,影响下次输入。
2)输入的字符数超出限定的大小
get(str,Size):读取Size-1个字符,并将str[Size-1]置为'\0',然后将剩余字符(包括'\n')留在输入缓冲区中,这些字符将被下一个读取输入的操作捕获,影响该输入处理;
getline(str,Size):读取Size-1个字符,并将str[Size-1]置为'\0',剩余字符(包括'\n')留在输入缓冲区中,随即设置cin失效位(即if(!cin)的判断为真),关闭输入。其后的所有输入都无法得到任何东西,当然也无法得到输入缓冲区中剩余的字符串。但如果象本例一样用clear()重置cin,其后的输入便可用并会得到遗留在输入缓冲区中的字符。这时候由于缓冲区留有'\n',会直接把缓冲区'\n'之前的字符输给下一个输入,也就是说控制台不等待键盘输入,直接把缓冲区的数据读取出去。
3)输入一个空行(即直接回车)
get(str,Size):str将得到'\0',并设置cin实效位,关闭输入,但回车依然留在输入缓冲区中,因此如果我们用clear()重置cin,其下一个读取输入的操作将捕获'\n';
getline(str,Size):str将得到'\0',并将'\n'删除掉,不置失效位,不关闭输入。所以对于cin.getline来说空行是合法的输入,且不会影响下面的输入处理。
2)输入的字符数超出限定的大小
get(str,Size):读取Size-1个字符,并将str[Size-1]置为'\0',然后将剩余字符(包括'\n')留在输入缓冲区中,这些字符将被下一个读取输入的操作捕获,影响该输入处理;
getline(str,Size):读取Size-1个字符,并将str[Size-1]置为'\0',剩余字符(包括'\n')留在输入缓冲区中,随即设置cin实效位(即if(!cin)的判断为真),关闭输入。其后的所有输入都无法得到任何东西,当然也无法得到输入缓冲区中剩余的字符串。但如果象本例一样用clear()重置cin,其后的输入便可用并会得到遗留在输入缓冲区中的字符。这时候由于缓冲区留有'\n',会直接把缓冲区'\n'之前的字符输给下一个输入,也就是说控制台不等待键盘输入,直接把缓冲区的数据读取出去。
3)输入一个空行(即直接回车)
get(str,Size):str将得到'\0',并设置cin实效位,关闭输入,但回车依然留在输入缓冲区中,因此如果我们用clear()重置cin,其下一个读取输入的操作将捕获'\n';
getline(str,Size):str将得到'\0',并将'\n'删除掉,不置实效位,不关闭输入。所以对于cin.getline来说空行是合法的输入,且不会影响下面的输入处理。
总的来说,使用get(),或者getline(),保证输入小于字符串长度,并在执行get()函数一次,就影响不了下次输入了。
推荐阅读
-
基于Python __dict__与dir()的区别详解
-
Vue中的作用域CSS和CSS模块的区别
-
电商互联网营销系列:产品软文和网店产品页详情描述的区别
-
Python中几种属性访问的区别与用法详解
-
字符串长度函数strlen和mb_strlen的区别示例介绍
-
vue.js的computed,filter,get,set的用法及区别详解
-
新手菜鸟必读:session与cookie的区别
-
Python中extend和append的区别讲解
-
python中xrange和range的区别
-
Python Pandas DataFrame:查询数据or选择数据(selection)之loc,iloc,at,iat,ix的用法和区别