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个赞
上面的代码注释掉str = { 0 };//至少在vs其他版本里这句是通不过编译的
在vs2012上,没有出现循环,你可以再建一个工程试试还是不是有同样情况,如果还是这种情况,应该就是vs2015无法这么用。
std::cin.sync();//这个东西的原意是同步输入流,而不是清空缓冲区,在不同编译器里的实现可能不同,也就是说上面清空的写法是特殊情况下才成立的
你可以测试用fflush(stdin);代替,c里的函数
ignore清除一行已经可以了,难道你cin里还能同时输入多行,而且这个函数没有那么多问题
- 1 回答
- 0 关注
- 384 浏览
添加回答
举报
0/150
提交
取消
