《C++ Primer Plus(第六版)》 P124 第8题 #include <iostream>
using namespace std;
struct Pizza {
char brand[20];
float diameter;
int weight;
};
int main(){
Pizza *pizza = new Pizza;
cout << "Your company's name: ";
cin.get(pizza->brand,20);
cout << "Please input the diameter of pizza: ";
cin >> pizza->diameter;
// cin.get();
cout << "the weight: " ;
cin >> pizza->weight;
cout << "Company: " << pizza->brand << endl
<< "Diameter: " << pizza->diameter <<endl
<< "Weight: " <<pizza->weight <<endl;
delete pizza;
return 0;
}
如果先输入公司的名字的话,可以顺利完成。
但是,如果我先输入直径,然后回车想输入公司名字的时候发现,命令框直接闪退了。
然后把cin.get()的注释去掉,就可以了。
书上专门讨论过getline和get的区别:
这里的输入序列是指“输入队列”,比如你两次调用cin.get(name,size),那么第二次调用的时候看到的第一个字符就是换行符。在本例中,getline和get是等价的。
我在输入完成直径以后,敲回车键,所以在输入队列中就有了回车键,然后get或者getline读取,发现回车键,所以就没办法完成输入了,也就是说cin是把回车键留在队列中的。
cin.get(),不加任何参数可以读取下一个字符(即使是换行符)。