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()来读取整行,如何知道停止读取的原因是由于已经读取了整行,而不是由于数组已填满?
查看下一个字符,如果是换行符,则已读取整行,否则,说明该行还有其他输入。