getline()、cin.get()和cin.getline()

1.<istream>中的cin.getline(m,5) 用于char数组

cin>>
cin默认使用空白(空格、制表符、换行符)来确定字符串的结束位置:
在<istream>中的getline()函数有两种重载形式:cin.getline()
istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );
用法:接收一个字符串,可以接收空格并输出
#include <iostream>
using namespace std;
main ()
{
char m[20];
cin.getline(m,5);
cout<<m<<endl;
}
输入:jkljkljkl
输出:jklj
接收5个字符到m中,其中最后一个为'\0',所以只看到4个字符输出;
如果把5改成20:
输入:jkljkljkl
输出:jkljkljkl
输入:jklf fjlsjf fjsdklf
输出:jklf fjlsjf fjsdklf
延伸:
1、cin.getline()实际上有三个参数,cin.getline(接收字符串的变量,接收字符个数,结束字符)
2、当第三个参数省略时,系统默认为'\0'
3、如果将例子中cin.getline()改为cin.getline(m,5,'a');当输入jlkjkljkl时输出jklj,输入jkaljkljkl时,输出jk

2.<string>中的getline函数getline(cin, str, 'A') 用于string类

在<string>中的getline函数有四种重载形式:
istream& getline (istream& is, string& str, char delim);
istream& getline (istream&& is, string& str, char delim);
istream& getline (istream& is, string& str);
istream& getline (istream&& is, string& str);
用法和上第一种类似,但是读取的istream是作为参数is传进函数的。读取的字符串保存在string类型的str中。
is:表示一个输入流,例如cin。
str:string类型的引用,用来存储输入流中的流信息。
delim:char类型的变量,所设置的截断字符;在不自定义设置的情况下,遇到'\n',则终止输入。
#include<iostream>
#include<string>
using namespace std;
int main(){
 string str;
 getline(cin, str, 'A');
 cout<<"The string we have gotten is :"<<str<<'.'<<endl;
 getline(cin, str, 'B');
 cout<<"The string we have gotten is :"<<str<<'.'<<endl;
return 0;}
输入
i_am_A_student_from_Beijing
输出
The string we have gotten is :i_am_.
The string we have gotten is :_student_from_.

3.<istream>中get函数 cin.get();    用于char数组

cin 对象有一个名为 get 的内置函数很有帮助。因为 get 函数是内置在 cin 对象中的,所以可称之为 cin 的一个成员函数。
两个参数
cin.get(arrayname,size)当遇到[enter]时会结束目前输入,他不会删除缓冲区中的[enter]
cin.getline(arrayname,size)当遇到[enter]时会结束当前输入,但是会删除缓冲区中的[enter]
#include<iostream>  
using namespace std;  
int main()  
{  
    char a[10];char b;  
        cin.get(a,10);  
    cin.get(b);  
    cout<<a<<endl<<int(b);  
}  
输入:12345[enter]
输出:12345 【换行】 10
说明:cin.get(a,10)把12345到a中,遇到[enter]结束,但是不把[enter]删除,则把[enter]输入到b中,(enter的ASCALL码为10)
三个参数
cin.getline(arrayname,size,s)当遇到s时会结束输入,并把s从缓冲区中删除
cin.get(arrayname,size,s)当遇到s时会结束输入,但不会删除缓冲区中的s
#include<iostream>  
using namespace std;  
int main()  
{  
    char a[10];char b;  
    cin.get(a,10,',');  
    cin.get(b);  
    cout<<a<<endl<<b;  
}  
输入:12345,[enter]
输出:12345【换行】,
说明:cin,get不会删除缓冲区的

4. while(getline(cin,s))理解

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s="";
    //int m=0;
    while(getline(cin,s)){
        cout << s << endl;
    }
    return 0;
}
1.只有getline函数动作完毕时,while才会执行内部的循环
对于while(getline(cin,str))来讲,while语句的真实判断对象是cin,
也就是当前是否存在有效的输入流,如果存在就不会结束循环。直到你输入了EOF或者ctrl+z,while循环才会结束,即读取到文件末尾的时候就不能再读取了,这个时候就会读取失败,这样循环就结束了。就是到了末尾了,再往后没东西就表示到了末尾了
在C++里面,到了末尾,就用EOF表示

5.cin.getline()cin.get()与getline()的主要区别

#include <iostream>  //cin.getline(char_nums,10)              用于char数组 
#include <iostream>  //cin.get(char_nums,10)     将enter不删除 用于char数组 
#include <string>    //getline(cin,str1)                      用于string类 
using namespace std;
int main()
{
//	  char char_nums[100];
//    cin.getline(char_nums,10);
//    cout<<char_nums<<endl;
    string str1;
    getline(cin,str1);
	cout<<str1<<endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值