永发信息网

C++ getline问题

答案:2  悬赏:50  手机版
解决时间 2021-02-20 11:14
我用的是VC++ 2008,一般程序写类似getline(cin,name)的时候,执行起来没有问题。但是有时在写面向对象的程序的时候,在主函数里写这一句,往往会不执行而直接跳过去。比如在switch结构体中,或者循环中输入:
cout<<"Enter your name"<getline(cin,name);
cout<实际程序执行的时候跳过了getline一句,只显示a。在循环中,getline只执行了一次。后来摸索发现若在getline一句之前加cin.ignore(),或者重复geiline一句,则可以正常执行getline语句,而ignore语句会被跳过。
请问这是VC++的bug还是其他的原因,有没有更好的解决办法?请高人指点。
最佳答案
在你写getline()函数之前,一定有使用过了回车了吧
不论你输入的是字符,数字或是回车,空格符,getline()函数都接收
而cin>>这种输入方式却是忽略回车的,如果你在getline()之前cin的一个数,回车被cin忽略了,却被getline函数接收了,感觉就是这条语句被跳过了
所以解决的办法是在getline函数之前再使用getline一次,将输入流里的回车符接收掉,后面就能正常输入了
全部回答

cin.getline接受的是字符串。语法:

cin.getline(char数组,n)。其中字符串长度为n,末尾是一个\0,所以只能输入n-1的有效字符。

也就是说,你的n必须小于等于数组定义的长度。我即便把n定义成5还是报错。

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
搜狗浏览器的地址栏旁边那个高速和兼容的选项
定岗定薪是什么意思
英皇国际俱乐部(新兴北路)在什么地方啊,我要
依米书院有小学奥数的辅导吗?
高跟鞋前面尖头弄得我脚好痛怎么办
魏都区游园社区卫生服务站在什么地方啊,我要
在一片湿润的土地上,有一堆长满苔藓的腐木,
老味道涮毛肚庄浪店地址有知道的么?有点事想
传媒公司是干什么的
房产证还没办下来,离婚该怎么办?
乌鲁木齐金大正建设工程有限公司地址在什么地
女包牌子 像个椭圆 像两个面对面的C 之间有个
为什么摩托车比赛总是倾斜车身转向,而不掉车
2015款帕萨特1.8丅6万公里保养花多少钱
德唯律师事务所我想知道这个在什么地方
推荐资讯
揭阳有光大银行吗??
旺角服饰(淅川县移民局香花移民所北)这个地址
移动手机,无缘无故收到10086发来的短信,称
60岁男人血压57至138,脉博68这样正常吗
永兴机电维修部地址有知道的么?有点事想过去
小黄炒货水果批零地址有知道的么?有点事想过
门面房是棺材房型怎么办?
市府小区南门怎么去啊,有知道地址的么
如果我出了北京西站的出站口,晚上没有地方去
珠海市香洲汇德泉商行怎么去啊,有知道地址的
怡静苑地址有知道的么?有点事想过去
石家庄市第二研究所地址有知道的么?有点事想
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?