getline()函数的几点疑惑

一、string类的getline函数(全局函数)
        getline()函数的定义如下所示
        1. istream& getline ( istream &is , string &str , char delim );
        2. istream& getline ( istream &is , string &str );
is 进行读入操作的输入流
str 用来存储读入的内容
delim 终结符,遇到该字符停止读取操作,不写的话默认为回车,如定义2中的示例。

函数的返回值:
        与参数is一样。
        前方预警,请各位看官注意!!!
        所以在使用while(getline(cin,line))的时候,判断while()是否结束循环的条件不是输入流是否输入了回车(或getline函数里你自己定义的结束符),而是getline这个函数是否输入无效(这么说好像有点绕,给你们来个爽快的)。直到你输入了EOF或者ctrl+z,while循环才会结束,而且要注意的是,只有getline函数动作完毕时,while才会执行内部的循环,例如
        while(getline(cin,str))
        {
                cout<<str<<endl;
        }
       直到你输入了回车或者你自己设定的结束符,str这个字符串才会被输出。理解了这一层就不难理解为什么输入回车while却无法跳出循环的现象了,这其实还是最基本的while条件判断而已(只要判断getline的返回值是否为真即可),只不过很容易将新手迷惑而已。

        注意:上面讲到的getline(cin,str)实际是一个全局函数,本身属于string类。所以你使用该函数的时候请记得添加#include <string>头文件。下面介绍一个与getline很相似的函数cin.getline。

二、输入流成员函数cin.getline           
        原型如下 
        cin.getline(char* charr,int num,char f);
       
         向字符数组charr(注意定义类型,是字符数组不是字符串)中输入num个字符,输入过程中达到num个数或者提前遇到f字符,输入结束。
        注:这里的getline是输入流对象的成员函数,即istream::getline,使用时需要头文件#include<iostream>。

展开阅读全文

没有更多推荐了,返回首页