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

关于cin.getline和cin.get的更多相关文章

  1. cin详解(cin.get()、cin.getline()、cin.clear()、cin.sync())

    在C中,输入输出用scanf和printf,在输入数据的同时还需说明数据的类型,如果输入数据较多,那就很麻烦,而C++中也有相似的东西cin和cout,它们来自C++的一个名叫" iostr ...

  2. C++中cin.getline与cin.get要注意的地方

    cin.getline与cin.get的区别是,cin.getline不会将结束符或者换行符残留在输入缓冲区中.

  3. c++中 cin、cin.get()、cin.getline()、cin.getchar()的区别

    ①cin>>:无法接收空格.Tap键且以空格.Tap键.回车符为分隔符: ②cin.get( ):可以接收空格.Tap键且以回车符为结束符: 一:可输入单个字符 格式: char ch; ...

  4. [原创]cin、cin.get()、cin.getline()、getline()、gets()、getchar()的区别

    这几个输入函数经常搞不清具体特点和用法,这里稍作总结 一.cin>> 1.最基本用法,输入一个变量值 2.输入字符串,遇“空格”.“TAB”.“回车”结束,比如输入“hello world ...

  5. C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法----细节决定成败 (sort用法)

    C++中cin.cin.get().cin.getline().getline().gets()等函数的用法 学C++的时候,这几个输入函数弄的有点迷糊:这里做个小结,为了自己复习,也希望对后来者能有 ...

  6. 关于符号匹配题的一些思考过程--含cin.getline()函数的一些基本原理

    刚刚拿到题目的时候,还没啥感觉,就是觉得要用到if--else就可以了,但是一联想到现在是在学栈,那么是不是要用到栈呢? 一.那么先看看题目吧 给定一串字符,不超过100个字符,可能包括括号.数字.字 ...

  7. getchar()、putchar()、gets()、puts()、cin.get()、cin.getline()、getline()

    1.getchar: 原型为int getchar(void). 它从stdin里读取一个字符.返回值为用户输入的ASCⅡ码,出错返回-1. eg:c=getchar(). 2.putchar: 原型 ...

  8. cin.get()和cin.getline()之间的区别

    cin.getline()和cin.get()都是对输入的面向行的读取,即一次读取整行而不是单个数字或字符,但是二者有一定的区别. cin.get()每次读取一整行并把由Enter键生成的换行符留在输 ...

  9. string中getline,cin的方法getline(),get总结

    一.string中的getline不是string的成员函数,属于全局函数,使用需要include<string>,有两个重载版本: 函数原型参见:http://www.cplusplus ...

随机推荐

  1. c#笔记之启动新线程

    可已通过下面方法来启动一个新线程并执行相应的方法 new Thread(new ThreadStart(new Action(() =>                        {     ...

  2. JavaEE JavaBean 反射、内省、BeanUtils

    JavaEE JavaBean 反射.内省.BeanUtils @author ixenos JavaBean是什么 一种规范,表达实体和信息的规范,便于封装重用. 1.所有属性为private2.提 ...

  3. JAVASCRIPT 框架>>

    jQuery jQueryjQuery 是目前最受欢迎的 JavaScript 框架 jQuery 是为处理 HTML 事件而特别设计的<script type="text/javas ...

  4. c++的函数模板和类模板

    函数模板和普通函数区别结论: 函数模板不允许自动类型转化 普通函数能够进行自动类型转换 函数模板和普通函数在一起,调用规则: 1 函数模板可以像普通函数一样被重载 2 C++编译器优先考虑普通函数 3 ...

  5. ural 1119. Metro(动态规划)

    1119. Metro Time limit: 0.5 second Memory limit: 64 MB Many of SKB Kontur programmers like to get to ...

  6. mysql创建计算列

    mysql> create table t(id int auto_increment not null,c1 int,c2 int,c3 int as (c1+c2),primary key( ...

  7. Alyona and flowers

    Alyona and flowers time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  8. 嵌套json

    今天一个客户问怎样把表中相同键值对应的文本按照一定顺序拼接起来.如果使用SQL实现将非常麻烦,并且效率低下.GP4.1以后提供了一个函数array_agg可以方便快捷,高效的实现该功能 比如原始查询是 ...

  9. window2008 64位系统无法调用Microsoft.Office.Interop组件进行文件另存的解决办法

    生成execl时遇到的问题: 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005 ...

  10. android之ViewStub的使用

    转自http://blog.csdn.net/hitlion2008/article/details/6737537 在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个V ...