通常大家会用sync来清除输入缓冲区内容个人感觉还是用ignore更好
先简单说下syncsync作用就是清除输入缓冲区成功时返回0失败时badbit会置位返回-1.
另外对于绑定了输出输入流sync还会刷新输出缓冲区
但由于运行时并不总是知道外部输入进度很难控制是不是全部清除输入缓冲区内容通常我们有可能只是希望放弃输入缓冲区中部分而不是全部比如清除掉当前行、或者清除掉行尾换行符等等但要是缓冲区中已经有了下行内容这部分可能是我们想保留这个时候最好不要用sync可以考虑用ignore代替
cin.ignore(numeric_limits<std::streamsize>::max,'\n');//清除当前行
cin.ignore(numeric_limits<std::streamsize>::max); //清除cin里所有内容
不要被长长名字吓倒numeric_limits<std::streamsize>::max不过是climits头文件定义流使用最大值你也可以用个足够大整数代替它
使用ignore显然能比sync更精确控制缓冲区
还有ignore这样用可以清除个不过这个用不多对于清楚知道要弃置个情况完全可以由做次读操作然后放弃读入内容来实现
最新评论