Bootstrap

getline读取多行

getline读取多行

几点说明:

  1. cin>> s 是无法读入换行和空格

  2. 当前面的cin>>w;输入数字之后,数字存储在输入缓冲区,敲回车,输入的数字因为回车的原因传给了w,但是换行符仍然滞留在输入流了,如果在cin>>w 后面有着getline语句,这个换行符就被这个getline读取了,发现getline结果为空

  3. cin.getline()不会把’\0’, ‘ ‘, ‘\n’等默认的分隔符写入到字符数组,因此如果在cin>>w后面紧接着的cin.getline语句(可以尝试把ignore()语句注释掉),会变为空读入,再后面的cin.getline()就正常读入每一行内容,并且把读入的分隔符舍弃。

  4. cin.getline(char*,numBuff, char delimeter) 和gets(char*)函数,均可以正常得读入输入行. 参数含义:cin.getline(接收字符串的变量,接收字符个数,结束字符)

  5. cin.ignore();和cin.get(); //cin.get()都可以用于舍弃输入流中不需要的字符

  6. < string>的getline函数,跟cin.getling一样如果输入缓冲中有换行符,需要读入一个空行来消耗此换行符,后面继续的读入才会正常。

    #include <iostream>  
    #include <string>  
    using namespace std;  
      
    int main()  
    {  
        string s;  
        int n;  
        cin>>n;  
        cin.ignore();  
        for(int i=0;i<n;i++)  
        {  
            getline(cin,s);  
            cout<<s<<endl;  
        }  
        return 0;  
    }  
    
;