1.面向行的输入:getline
getline()函数读取整行,他使用通过回车键输入的换行字符来确定输入结尾。要调用这种方法,可以用cin.getline()。该函数有两个参数。第一个参数是用来存储输入行的数组名称,第二个参数是要读取的字符数如果这个参数为20,则函数最多读取19个字符,余下的空间用于存储自动在结尾处添加的空字符‘\0’,getline()成员函数在读取指定数目的字符或遇到换行符时停止读取。
例如 cin.getline(name,20);这将一行读入到name数组中。
2.面向行的输入:get
istream类有另一个名为get的成员函数,该函数有几种变体。其中一种变体的工作方式与getline()类似,他们接受的参数相同,解释参数的方式也相同,并且都读取到行尾。但是get并不再读取冰丢掉换行符,而是将其留在输入队列中。这样会造成一个潜在的问题,就是如果有超过两次以上的字符输入,其后的字符数组中将存储的都是空,比如
cin.get(name1,30);
cin.get(name2,30);
如果想把name1中存储 i love you!把name2中存储do you love me?这是你会输入 i love you!【键入回车键】结果你会发现程序不允许你输入第二次了,因为回车键没有被读取并丢弃,所以name2在缓冲区中遇到了回车键,并且name2中的值为空。为了避免这个问题,我们可以这样写cin.get(name1,30).get();之所以可以这样写是应为cin.get(name1,30)返回一个cin对象。这样可以消除潜在的问题。
注意事项:当get和getline读取空行或将设置失效位failbit,这意味着接下来的输入将会被阻断,但可以用下面的命令来恢复失效位cin.clear();另一个潜在的问题是,输入字符串可能比分配的空间长。如果输入行包含的字符数比指定的 多,则getline和get将剩余的字符留在输入队列中,而getline还会设置失效位,并关闭后面的输入。
3.getline输入到string中
getline(cin,str);这个挺好用的。这表明getline不是类方法。它将cin作为参数,指出到哪里去查找输入。另外就是没有支出字符串的长的参数,因为string对象将根据字符串的长度自动的调整自己的 大小。还是这个好用,呵呵。