C++中的getline函数有两个:
1 是iostream类对象的成员函数
2 是一个全局函数
在C++中为了使用的方便,C++在标准库中添加了getline函数。
其实在C++中对不同的输入流对象都定义了一个getline函数,即:std::fstream::getline std::istream::getline std::ifstream::getline std::iostream::getline std::wfstream::getline std::wistream::getline std::wifstream::getline std::wiostream::getline std::stringstream::getline std::basic_fstream::getline std::basic_istream::getline std::istringstream::getline std::wstringstream::getline std::basic_ifstream::getline std::basic_iostream::getline std::wistringstream::getline std::basic_stringstream::getline std::basic_istringstream::getline
这儿我们讨论标准输入对象的getline函数,其他的对象的情都是类似的。
在头文件<iostream>中声明了getline函数:istream::getline istream& getline (char* s, streamsize n ); istream& getline (char* s, streamsize n, char delim );
函数是C类型的数组。因为C++中允许对函数进行重载,所以可以有多个同名函数。delim参数是指定分隔符。如果不指定的话,默认使用'\n'
下面是一个例子:void test1(){
char line[100]; while(cin.getline(line,100)) cout<<line<<endl;} 注意这儿的getline是要读入空白符。但是不包括最后的换行符。C++中还定义了一个在std名字空间的全局函数,因为这个getline函数的参数使用了string字符串,所以声明在了<string>头文件中了。声明如下:istream& getline ( istream& is, string& str, char delim ); istream& getline ( istream& is, string& str );
简单的示例如下:
void test2(){
string line; while(getline(cin,line)) cout<<line<<endl;} 注意此处也是不读入换行符的。所以在C++中读取一行的函数是不读入换行符的,而GCC中getline函数是读入换行符的。可以理解为,一般情况下不读入,特别的是GCC的读入。