c++ 中 cin getline get的详解

cin getline get 三者的大致对比

关键字读取对象结束标志使用方法
cin一次读取一串字符串在遇到(空格制表符换行符时停止,并自动在结尾处添加空字符)cin>>name
通过键盘把一个字符串输入到name(string型变量)
getline一次读取一行字符串通过回车键cin.getline(name,20)
通过键盘把一行字符串输入到name(string型变量)中去,20表示只会接受前19个字符,第20个字符是空字符,虽然我们以回车来结束输入,但是存到数字符串中的时候会把回车替换成\0,如下图1所示
get一次读取一行字符串同上cin.get()
与上面一样,但有一个区别在于其不会丢弃换行符

       图1
               图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()来读取换行符,再开始读取新行,其中我们需要注意以下几点

  1. cin.get();表示读取输入队列中的一个字符,我们用这一行命令来读取换行符
  2. cin.get(name,20)表示读取字符串
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值