为了账号安全,请及时绑定邮箱和手机立即绑定

请问有谁知道C++ cin.sync()的作用到底是什么?

请问有谁知道C++ cin.sync()的作用到底是什么?

扬帆大鱼 2021-12-10 11:07:32
C++ cin.sync()的作用到底是什么?不是说清空缓冲区吗?为什么会出现无限循环?#include "stdafx.h"#include <iostream>#include <string>int main(){int value, i = 0;char c;std::string str;std::cout << "输入一个数值:";while (!(std::cin >> value)){str = { 0 };std::cin.clear();std::cin.sync();//出现无限循环的情况//std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');//这个清除一行就有效// while ((c = std::cin.get()) != '\n') // str += c; //把缓冲区的写到str//std::cout << "str:" << str << std::endl;std::cout << "输入有误,重新输入:";}std::cout << "输入成功了!" << std::endl;;}输入的字符,读取到str还是完整的,哪有清空?这是为什么?是我理解错了吗?
查看完整描述

1 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

  1. 上面的代码注释掉str = { 0 };//至少在vs其他版本里这句是通不过编译的

  2. 在vs2012上,没有出现循环,你可以再建一个工程试试还是不是有同样情况,如果还是这种情况,应该就是vs2015无法这么用。

  3. std::cin.sync();//这个东西的原意是同步输入流,而不是清空缓冲区,在不同编译器里的实现可能不同,也就是说上面清空的写法是特殊情况下才成立的

  4. 你可以测试用fflush(stdin);代替,c里的函数

  5. ignore清除一行已经可以了,难道你cin里还能同时输入多行,而且这个函数没有那么多问题


查看完整回答
反对 回复 2021-12-13
  • 1 回答
  • 0 关注
  • 384 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号