cin getline get 三者的大致对比
关键字 | 读取对象 | 结束标志 | 使用方法 | |
---|---|---|---|---|
cin | 一次读取一串字符串 | 在遇到(空格制表符和换行符时停止,并自动在结尾处添加空字符) | cin>>name 通过键盘把一个字符串输入到name(string型变量) | |
getline | 一次读取一行字符串 | 通过回车键的 | cin.getline(name,20) 通过键盘把一行字符串输入到name(string型变量)中去,20表示只会接受前19个字符,第20个字符是空字符,虽然我们以回车来结束输入,但是存到数字符串中的时候会把回车替换成\0,如下图1所示 | |
get | 一次读取一行字符串 | 同上 | cin.get() 与上面一样,但有一个区别在于其不会丢弃换行符 |
图1
cin详解
#include <iostream>
int main(){
using namespace std;
const int ArSize = 20;
char name [ArSize] ;
char dessert [ArSize] ;
cout << "Enter your name: \n";
cin>> name;
cout<<"your name:"<<name<<endl;
return 0;
}
输出结果如图2所示,我们可以清楚的看到,我们在输入Wen Yuan
但是输出只有Wen
,因为cin
会把它接收到的第一个空字符看作结束符。
图2
getline详解
- 一次读取一行
- 以 换行符(回车键) 作为结束符
- 读取该回车符号,并把它转换为字符串尾的’\n’
int main(){
using namespace std;
const int ArSize = 20;
char name[ArSize];
char dessert[ArSize];
cout << "Enter your name: \n";
cin.getline(name, ArSize); // reads through newl ine
cout << "Enter your favorite dessert:\n";
cin.getline(dessert, ArSize);
cout << "I have some delicious"<< dessert ;
cout << " foryou:"<<name<<".\n";
return 0;
}
一次读取一行,上述函数的运行结果如下图3所示
图3
get详解
- get也是一次读取一行
- 不丢弃换行符(回车键) 把它留在输入队列中
#include <iostream>
using namespace std;
int main()
{
using namespace std;
char name[20];
char city[20];
char age[20];
cout << "请输入你的名字" << '\n';
cin.get(name,20);
cout << "请输入你的城市" << endl;
cin.get(city, 20);
cout << "请输入你的年龄" << endl;
cin.get(age, 20);
cout << "你的名字:"<<name<<"你的城市:"<<city<<"你的年龄:" <<age<< endl;
return 0;
}
该代码的执行结果如下图所示,我们可以看到,我们只读取了第一个cin.get()
,而在输入Wen Yuan
之后我们需要敲下一个回车键来确定输入结束,但该回车键不会被读取,而会一直留在输入队列中,所以下面两个cin.get()
一直都是一开始就读到了回车键,所以就跳过了,如果后面还有cin.get()
,也会一直被跳过。
为了克服这一情况,我们一般使用如下方法
char name[20];
char dessert[20];
cin.get(name,20) ;// read first line
cin.get();// read newline
cin.get(dessert, 20);// read second line
使用cin.get()
来读取换行符,再开始读取新行,其中我们需要注意以下几点
cin.get();
表示读取输入队列中的一个字符,我们用这一行命令来读取换行符- cin.get(name,20)表示读取字符串