关于cin.getline和cin.get

时间:2023-03-09 23:11:04
关于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(),不加任何参数可以读取下一个字符(即使是换行符)。