C++之C++ primer plus 第五单元编程题第七题

题如下:

设计一个名为car的结构,储存生产商(string字符串或char数组),生产年份(int)。要求:向用户询问有多少辆汽车i,new一下i个car结构组成的动态数组。接着程序提示用户输入每辆车的生产商和年份信息。运行结果如下:

How many cars do you wish to catalog?2

Car #1:

Please enter the make:dazhong

Please enter the year make:1254

Car #2:

Please enter the make: toyota

Please enter the year make:1564

Here is your collection:

1254 dazhong

1564 toyota

话说这一题也不是很难吧,可是还是折磨了我一下午呢。好好的第五单元的循环题,还加上上一单元的new结构体数组,还要使用get(),getline()函数,只有把这些都复习一遍喽,界面都能出来,就老是跳过输入string字符串这一步,简直有毒,也没有错误提示,很牛逼喽,检查错误还无从下手。哼,上图:

 

运行情况如下:

可以看到,直接跳过了string字符串的输入,而直接输入int数值。代码没错啊,没错误提示也没警告啊,于是我问了大神,代码修改如下:

就加了俩cin.get()而已啊,头疼了下午,即使我小心地看了一下get(),getline()的使用区别,没想到还是躺着上面了。以下链接详解。

第一个cin.get(),是由于我在getline之前有从键盘输入i,然后按下回车键完成输入,而cin >> 是读取键盘输入,读到回车键停止而将回车键留在输入队列中,getline在读取数据时直接读到回车,则直接结束了getline数据的读取跳入下一行代码执行。随意要在getline前将回车忽略cin.get()和cin.ignore()都是可以的。在进入第二次循环的时候,不再读取循环体外的数据,则第一个cin.get()作废,在输入之后,第二个getline读取到上一个year的输入的回车,又直接跳过,执行下一行,所以要在第一个year结束后忽略回车的输入!

详解链接:

 https://www.cnblogs.com/hhddcpp/p/4308587.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值