以下内容来自:http://yanger2004.ycool.com/post.2831191.html
相同点:
要获取一行的输入,标准流类的成员函数getline(),get()都有三个参数,比如getline(char*line,int size,char ='/n')。其中第一个参数指向存储结果字符的缓冲区指针,第二个表示缓冲区大小(本次读取的最大字符个数,不能够超过其限度),第三个表示知道什么时候停止读输入的终止符(读取一行结束的标志)。终止符有一个经常用到的缺省值"/n"。两个函数遇到输入终止符时,都把零储存在结果缓冲区里。
不同点:
2.在处理字符串时,get()遇到输入流的分隔符时就停止,而不从输入流中提取分隔符。比如用cin.get(myarray1,30,'*');处理字符串1111*2222,碰到*就停止。cout<
以下内容来自
istream中的类提供了一些面向行的类成员函数;getline()和get()。这两个函数都读取一行输入,直到到达换行符。然而,随后getline()将丢弃换行符,而get()将换行符保留在输入序列中。
getline()程序举例
#include
using namespace std;
const int ArSize = 20;
int main()
{
char name[ArSize];
char dessert[ArSize];
cout<
cin.getline(name,ArSize);
cout<
cin.getline(dessert,ArSize);
cout<
cout<
return 0;
}
在使用 get()时应该注意 get()是将换行符保留在输入序列中,假使我们连续两次调用get()那么第二次调用时看到的第一个字符便是换行符。因此get()认为已到达行尾,而没有发现任何可读取的内容。我们可以使用不带任何参数的cin.get()调用来读取下一个字符,为读取下一行输入做好准备。
cin.get(name,ArSize);
cin.get();
cin.get(dessert,ArSize);
另外一种使用get()的方式是将两个类成员函数拼接起来;
cin.get(name,ArSize).get();
程序例子
#include
using namespace std;
const int ArSize = 20;
int main()
{
char name[ArSize];
char dessert[ArSize];
cout<
cin.get(name,ArSize).get();
cout<
cin.get(dessert,ArSize).get();
cout<
cout<
return 0;
}
当getline()和get()读取空行时;
get()读取空行后会将设置失效位。这意味接下来的输入将被阻断;但可以使用下面的命令来恢复输入
cin.clear();
另一个潜在的问题,输入字符串可能比分配的空间长。如果输入行包含的字符数比指定的多,则getline()和get()将把余下的字符留在输入队列中,而getline()还会设置失效位,并关闭后面的输入。