c++中cin.ignore()的问题如何解决

cout<<"Entertheemployee'sname:";cin.ignore();getline(cin,employee.name);怎么解释?不是已经igno... cout<<"Enter the employee's name: ";
cin.ignore();
getline(cin, employee.name);

怎么解释?不是已经ignore到换行了吗,怎么还能在本行取字符串?
我哪里理解错了
展开
 我来答
heresy_me
推荐于2018-04-12 · TA获得超过1719个赞
知道小有建树答主
回答量:1708
采纳率:42%
帮助的人:306万
展开全部

参考Bjarne Stroustrup 《C++程序设计语言》:

ignore()函数像read()一样读字符,但它并不将读入的字符存到任何地方。它也像read()一样能实际读n个字符(而不是n - 1个)。由ignore()读入的字符的个数默认为1,所以不用参数调用ignore()就意味着“丢掉下一个字符”。ignore()也可以用一个结束符(像getline()一样),在读入中遇到这个结束符时,就将它从输入流中删除。注意,ignore()的默认结束符是文件结束。



所以,你应该写

std::cin.ignore(80, '\n');

最多读入80个字符,或其间遇到'\n'就停止,'\n'会被删除。

所谓“删除”的意思可以比较std::cin.get和std::cin.getline,还是用书上的例子:

void subtle_infinite_loop()
{
      char buf[256];
      
      while (cin) {
          cin.get(buf, 256);
          cout << buf;
      }
}

std::cin.get和std::cin.getline一样,默认是以'\n'为结束标志(其实这两个函数都是两个版本,是函数重载,一个是两个参数的,一个是三个参数的),上面的get如果在读入256之前遇到'\n',流中的'\n'不会被“删除”,下一次你读入的时候会遇到的第一个字符就是终结符'\n',它不是指从文件里面删除掉这个字符。而std::cin.getline和std::cin.ignore又有相同之处,就是在读入指定的字符前遇到终结符就会把终结符“删除”掉,所以下一次读入时就不会遇到终结符了。还有,所谓std::cin.get或std::cin.getline读入n-1个字符是,std::cin.get和std::cin.getline会实际读入指定数的字符少一个,因为它会在buf读入的字符后面加上'\0',但是read不会在buf后加上'\0'。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式