股票

C++中的三种输入方式

C++中的输入

cin,使用空格、tabs、和换行键判定字符串输入结束。比如输入Alistair Dreeb时,读到空格字符时,cin把Alistair放到数组中,最后加‘\0’,其余的部分放在输入队列中。再次有cin输入命令时,cin发现Dreeb在输入队列中,不再需要键盘输入直接从队列中读取Dreeb,并把它放到数组中。并且,cin对数组溢出没有保护。cin读取的时候把换行符留在队列中。

get()line(),执行完成后,指向下一行。一次读取一行,使用换行符“enter”作为输入的结束。可以引用cin.get()line()作为函数调用。gin.getline()(name, length),第一个参数是输入数组名称,第二个参数是输入长度。结束条件为,一是有换行符,二是达到输入长度。最多输入length-1个字符,最后一个用于存储“\0”.getline()()读取完成后,不保存换行符(enter),会用null取代换行符,同时队列中不再有换行符。

get(),执行完成后,指向当前行。get()读取方式和getline()一样,需要两个参数,第一个是数组,用于保存读取到的数据,第二个是长度。由于get()读取完成后不会自动换行,还停留在当前行,所以在读取完成第一行后,需要强制其换到第二行,不然无法读取下一行的内容。换行方法有两种,一种是读取完成后执行cin.get(),另一种是使用cin.get(name, length).get()。

实际上,输入的时候,我们敲入字符串,比如“hello”,再按回车(输入换行符)的时候,hello和换行符同时存储在输入队列中,get()只是读取hello,不读取换行符;而getline()读取hello,然后读取换行符,保存在数组的时候用null取代了换行符。所以,添加get()不带参数的作用就是把换行符读取掉,由于没有任何参数,相当于丢弃了。如果没有get(),直接带参数读取下一个,下一个字符串的第一个字符就变成了换行符,而get()以换行符判断结束,所以会直接认为读取完成而结束读取,导致下一个字符串只有一个换行符。

特别的,当length比较短,而一行输入的字符很长时,get(name, length)一次读取length-1长度的字符,但是不对其余的字符进行处理,下个get(name, length)会继续从队列中读取剩余的字符,直到读取完毕(一行读完,遇到换行符)。当length比较长,而一行输入字符比较短时候,如果没有get()(注意没有参数),get(name, length)不对换行符进行处理,并且认为读取完成,所以会造成之后的get(name, length)全部读取为空。因为get()在读取空字符后,会阻塞之后的输入,要想打开输入,可以使用cin.clear().

getline(),在读取超出长度的字符时,只读取前length-1位,并且会造成之后的所有读取均为空,因其阻塞了输入端口。

打赏
原文链接:,转发请注明来源!

发表评论