题如下:
设计一个名为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