混合使用cin>>和cin.get(char[],n),以及输入数字和字符串时问题,2021-12-17

1.

输入数字的用法:
int a,b;
cin>>a;
cin>>b;
程序正常运行。

2.

都使用cin去处理,正常输入也是正确的,这是因为cin会自动处理换行符
int a;
char b
cin>>a;
cin>>b;
在这里插入图片描述
在这里插入图片描述

3.

混合使用cin>>和cin.get()时就会出问题

但是定义结构体,使用new创建动态结构体时,会出现问题
在这里插入图片描述
直接出现了还没输入ch字符串变量,就直接到输出了,这是因为get获取到了空行,即读入了换行符。

#include<iostream>
struct inflatable
{
	char name[20];
	float volume;
	double price;
	char test[20];
};

int main()
{
	using namespace std;
	inflatable* ps = new inflatable;
    cout << "Enter price:";
	cin >> ps->price;
//	cin.ignore();
	cout << "Enter name:";
	cin.get(ps->name, 20);
//	cin.get();

	cout << endl<< "name:" << ps->name << endl;
	cout << "price:" << (*ps).price << endl;

	delete ps;
	return 0;
}

在这里插入图片描述
此时就会出现还没输入name这个字符串变量,就跳过的情况,
这是因为输入流中上一次输入后留下的回车符还在流中未被处理,
这与开头代码不同的地方在于,cin函数会对不同类型变量进行一定的功能变化
那么此时就需要自行把输入流中的换行符处理,
使用cin.get()或者cin.ignore(),避免下一次输入时获取到空行。
不带参数的get()能处理换行符。

以下是我遇到问题的代码

#include<iostream>
struct inflatable
{
	char name[20];
	float volume;
	double price;
	char test[20];
};

int main()
{
	using namespace std;
	inflatable* ps = new inflatable;
	
    cout << "Enter price:";
	cin >> ps->price;
	cin.ignore();
	cout << "Enter name:";
	cin.get(ps->name, 20);
	cin.get();
	cout << "Enter test:";
	cin.get(ps->test, 20);

	cout << endl<< "name:" << ps->name << endl;
	cout << "price:" << (*ps).price << endl;
	cout << "test:_" << ps->test<<"_"<<endl;
	
	delete ps;
	return 0;
}

正确运行结果:
在这里插入图片描述

混合使用 cin>> 和 cin.get

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值