关于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(),不加任何参数可以读取下一个字符(即使是换行符)。

posted @ 2014-03-23 19:06  此去经年  阅读(527)  评论(0编辑  收藏  举报