目录
1.getline()和cin.getline()
2.cin和getline()的区别
3.cin.get()和cin.getline()的区别
4.cin>>和cin.getline()一块用时注意
先来说一个getline()和cin.getline()两者的区别
(1)两者属于不同的库中,getline()在
(2)用法不同
getline()的用法
#include
#include
using namespace std;
int main()
{
string str;
getline(cin,str);
cout << str;
return 0;
}
这是getline()的用法,getline(cin,string类型的变量,分隔的符号)最后一个分隔的符号可有可没有,不设置的情况下系统默认该字符为’\n’,也就是回车换行符(遇到回车停止读入),读取的字符串一定是string类型的字符串,不能读取char str[],char* str的字符数组,如果没有特殊的指定,是可以读取空格
cin.getline()的用法
#include
using namespace std;
int main()
{
char str[20];
cin.getline(str,20);
cout << str;
return 0;
}
上面是cin.getline的用法,cin.getline(字符数组,size,分隔字符),它以指定的地址为存放第一个读取的字符的位置,依次向后存放读取的字符,直到读满N-1个,或者遇到指定的结束符为止。若不指定结束符,则默认结束符为’\n’。读取的字符串一定是字符数组类型的char str[]或者char *str,如果没有特殊的指定,是可以读取空格
cin的用法
#include
#include
#include
using namespace std;
int main()
{
string str1;
cin>>str1;
cout<
getline()的用法
#include
#include
using namespace std;
int main()
{
string str;
getline(cin,str);
cout << str;
return 0;
}
cin读到空字符的时候就会自动停止,读到的部分是空字符之前的
getline()则是读到指定字符的位置,默认为换行的位置
他们两个语法上是相同的
getline的是cin.getline(str,size,分隔字符)
#include
#include
using namespace std;
int main()
{
char str[20];
cin.getline(str,20);
cout << str;
return 0;
}
get的是cin.get(str.szie,分隔字符)
#include
#include
using namespace std;
int main()
{
char str[20];
cin.get(str,20);
cout << str;
return 0;
}
他们都是读取char str[]和char *str类型的字符数组,因为两者都是默认读到'\n',最大的区别就是get不会丢去最后一个'\n',而getline()会丢去'\n',这个易错的就是当连续输入时,get(str,size)之间要加一个cin.get()或者cin.ignore,因为cin.get(str,size)不会丢弃最后的'\0'换行符,第二个cin.get(str,size)就会读到'\0',就会直接运行,不会让你输入
#include
#include
using namespace std;
int main()
{
char a[20];
char b[20];
cin.get(a, 20);
cin.ignore();
cin.get(b, 20);
cout << a << " " << b << endl;
return 0;
}
而cin.getline()会丢弃'\0',不需要加cin.ignore()
#include
#include
using namespace std;
int main()
{
char a[20];
char b[20];
cin.getline(a, 20);
cin.getline(b, 20);
cout << a << " " << b << endl;
return 0;
}
cin.getline(a, 10);//第10位存放字符串结束符'\0'
#include
#include
using namespace std;
int main()
{
char str[30];
int n;
cin >> n;
cin. ignore();
cin.getline(str,n);
cout << str << endl;
return 0;
}
#include
#includeusing namespace std;
int main()
{
char str[30];
char str1[30];
int n;
cin >> n;
cin.ignore();
cin.getline(str,n);
cin.getline(str1, n);
cout << str << endl;
cout << str1 << endl;
return 0;
}
****上面的代码当你制定好n的个数之后输入的个数不能超过n-1个,为什么是n-1个呢,因为最后一个字符会被'\0'代替,如果制定好n的个数之后,输入字符的个数超过了n-1个就会存在溢出,就不能再继续输入
#include
#include
using namespace std;
int main()
{
char str[30];
int n;
cin >> n;
cin.ignore();
cin.getline(str, 30);
cout << str << endl;
cout << n << endl;
return 0;
}
cin>>放到getline前面的时候要在中间加一个cin.ignore();因为cin>>读到'\0'就不读了,'\0'就在缓存区中,我们需要先干掉'\0'所以先输入一行ignore的代码
getline放到前面是没有问题的