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;
}