题如下:

设计一个名为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字符串这一步,简直有毒,也没有错误提示,很牛逼喽,检查错误还无从下手。哼,上图:

 

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

运行情况如下:C++之C++ primer plus 第五单元编程题第七题

可以看到,直接跳过了string字符串的输入,而直接输入int数值。代码没错啊,没错误提示也没警告啊,于是我问了大神,代码修改如下:C++之C++ primer plus 第五单元编程题第七题

就加了俩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

 

相关文章:

  • 2022-02-01
  • 2022-12-23
  • 2022-12-23
  • 2021-04-12
  • 2021-06-22
  • 2021-05-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-05-18
  • 2021-06-28
  • 2021-08-15
  • 2021-12-10
  • 2021-08-19
  • 2021-05-26
  • 2022-12-23
相关资源
相似解决方案