永发信息网

C++ getline问题

答案:2  悬赏:50  手机版
解决时间 2021-02-20 11:14
  • 提问者网友:放下
  • 2021-02-20 06:47
我用的是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还是其他的原因,有没有更好的解决办法?请高人指点。
最佳答案
  • 五星知识达人网友:渊鱼
  • 2021-02-20 08:03
在你写getline()函数之前,一定有使用过了回车了吧
不论你输入的是字符,数字或是回车,空格符,getline()函数都接收
而cin>>这种输入方式却是忽略回车的,如果你在getline()之前cin的一个数,回车被cin忽略了,却被getline函数接收了,感觉就是这条语句被跳过了
所以解决的办法是在getline函数之前再使用getline一次,将输入流里的回车符接收掉,后面就能正常输入了
全部回答
  • 1楼网友:鸠书
  • 2021-02-20 08:57

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

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

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

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯