马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
为什么会直接跳过getline()函数的输入
#include<iostream>
#include<string>
struct Pisa
{
std::string name;
double diameter;
double weight;
};
int main()
{
using namespace std;
Pisa * pisa = new Pisa;
cout << "输入一个直径:";
cin >> pisa->diameter;
cout << "输入一个名称:";
getline(cin, pisa->name);
cout << "输入一个重量:";
cin >> pisa->weight;
cout << "名称:" << pisa->name << endl;
cout << "直径:" << pisa->diameter << endl;
cout << "重量:" << pisa->weight << endl;
delete pisa;
cin.get();
cin.get();
return 0;
}
1. Std::cin>> s 是无法读入换行和空格
2. 当前面的std::cin>>w;输入数字之后,数字存储在输入缓冲区,敲回车,输入的数字因为回车的原因传给了w,但是换行符仍然滞留在输入流了,如果在std::cin>>w 后面有着getline语句,这个换行符就被这个getline读取了,发现getline结果为空
3. cin.getline()不会把’\0’, ‘ ‘, ‘\n’等默认的分隔符写入到字符数组,因此如果在std::cin>>w后面紧接着的cin.getline语句(可以尝试把ignore()语句注释掉),会变为空读入,再后面的cin.getline()就正常读入每一行内容,并且把读入的分隔符舍弃。
|