getline函数的作用是从输入流中读取一行字符,其用法与带3个参数的get函数类似。即
cin.getline(字符数组(或字符指针), 字符个数n, 终止标志字符)
getline()的原型是istream& getline ( istream &is , string &str , char delim );
其中 istream &is 表示一个输入流,譬如cin;
string&str表示把从输入流读入的字符串存放在这个字符串中(可以自己随便命名,str什么的都可以);
char delim表示遇到这个字符停止读入,在不设置的情况下系统默认该字符为’\n’,也就是回车换行符(遇到回车停止读入)。
- 看下面一段源码
#include <iostream>
using namespace std;
int main( )
{
char ch[20];
cout<<"enter a sentence:"<<endl;
cin>>ch;
cout<<"The string read with cin is:"<<ch<<endl;
cin.getline(ch,20,'/'); //读19个字符或遇'/'结束
cout<<"The second part is:"<<ch<<endl;
cin.getline(ch,20); //读19个字符或遇'/n'结束
// 也有一种用法是:getline(cin,ch,'/');
cout<<"The third part is:"<<ch<<endl;
return 0;
}
--- Output ---------------------------------------
enter a sentence: I like C++./I study C++./I am happy.↙
The string read with cin is:I
The second part is: like C++.
The third part is:I study C++./I am h
请仔细分析运行结果。用“cin>>”从输入流提取数据,遇空格就终止。因此只读取 一个字符’I’,存放在字符数组元素ch[0]中,然后在ch[1]中存放’\0’。
因此用”cout<<ch”输出时,只输出一个字符’I’。然后用cin.getline(ch, 20, ‘/’)从输入流读取19个字符 (或遇结束)。请注意:此时并不是从输入流的开头读取数据。
在输入流中有一个字符指针,指向当前应访问的字符。在开始时,指针指向第一个字符,在读入第一个字符’I’后,指针就移到下一个字符(’I’后面的空格),所以getline函数从空格读起,遇到’/’就停止,把字符串” like c++.”存放到ch[0]开始的10个数组元素中,然后用”cout<<ch”输出这10个字符。
用getline函数从输入流读字符时,遇到终止标志字符时结束,指针移到该终止标志字符之后,下一个getline函数将从该终止标志的下一个字符开始接着读入,如本程序运行结果所示那样。如果用cin.get函数从输入流读字符时,遇终止标志字符时停止读取,指针不向后移动,仍然停留在原位置。下一次读取时仍从该终止标志字符开始。这是getline函数和get函数不同之处。
顺便简单讲一下gets和puts方法
//用Getchar函数输入一个字符
char a,b,c;
a=getchar();
b=getchar();
c=getchar();
//用Putchar函数输出一个字符
putchar(a);
putchar(b);
putchar(c);
//字符串的输入输出
//用gets函数输入字符串
gets(str);
//用puts函数输出字符串
puts(str);
//puts和gets只能对一个字符串进行操作,不能同时操作多个字符串
Reference:
C++ getline()函数读入一行字符
getline()函数详解