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;
}
正确运行结果: