关于cin.getline和cin.get
《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的区别:
这两个函数都读取一行输入,直到到达换行符。然后getline()将丢弃换行符,而get()将换行符保留在输入序列中
这里的输入序列是指“输入队列”,比如你两次调用cin.get(name,size),那么第二次调用的时候看到的第一个字符就是换行符。在本例中,getline和get是等价的。
我在输入完成直径以后,敲回车键,所以在输入队列中就有了回车键,然后get或者getline读取,发现回车键,所以就没办法完成输入了,也就是说cin是把回车键留在队列中的。
cin.get(),不加任何参数可以读取下一个字符(即使是换行符)。
浙公网安备 33010602011771号