getline()与get()(c++学习笔记)

istream中的类(如cin)提供了一些面向行的类成员函数:getline()和get()

1.getline()函数

读取整行,使用回车键输入的换行符来确定输入结尾。

调用方法:cin.getline(参数1,参数2)

该函数有两个参数,第一个参数是用来存储输入行的数组的名称,第二个参数是要读取的字符数,如果这个参数为20,则函数最多读取19个字符,余下的空间用于存储自动在结尾处添加的空字符。

getline()成员函数在读取指定数目的字符或遇到换行符时停止读取。

它通过换行符来确定行尾,但不保存换行符,相反,在存储字符串时,它用空字符来替换换行符。

2.get()函数

调用方法:cin.get(参数1,参数2)

与getline()一样,接受的参数相同,解释参数的方式也相同,并且都读取到行尾,但get不再读取并丢弃换行符,而是将其留在输入队列中。

例:cin.get(name,Size);

       cin.get(dessert,Size);

由于第一次调用后,换行符将留在输入队列中,因此第二次调用时看到的第一个字符便是换行符,因此get()认为已达到行尾,而没有发现任何可读取的内容。

可用不带参的cin.get()可读取下一个字符(即便是换行符),因此可以用它来处理换行符,为读取下一行做好准备。

也可将两个类成员拼接起来使用,如cin.get(name,Size).get();

当使用get()来读取整行,如何知道停止读取的原因是由于已经读取了整行,而不是由于数组已填满?

查看下一个字符,如果是换行符,则已读取整行,否则,说明该行还有其他输入。

上一篇:c – 在类中使用fstream getline()函数


下一篇:为什么在C中读取stdin的行比Python慢​​得多?