有关std::cin的一些用法探寻

cin在未成功赋值,比如类型输入错误时,为变量赋值0。

↑此时可用cin.rdstate()检测错误类型。

返回0(即ios::goodbit)时表示无错误,可以继续输入或者操作,若返回4则发生非致命错误即ios::failbit,则不能继续输入或操作

goodbit 无错误
Eofbit 已到达文件尾
failbit 非致命的输入/输出错误,可挽回
badbit 致命的输入/输出错误,无法挽回 若在输入输出类里.需要加ios::标识符号

因此用cin.ignore()清除缓冲区之前,必须用cin.clear()将错误状态恢复才能进行操作。

而对于cin.sync()来说,对于 std::cin 这些标准库「自带」的输入流来说,调用 sync() 是「实现定义」的行为

所以此处调了 sync() 以后清空、恢复原状、什么都不干都是可以的,如果没有得到预期的效果的话,可以查看自己的编译器(标准库实现)的说明文档,上面应该有写明它所使用的是哪种行为。

总之就是,通用的手段是用cin.ignore(),cin.sync()是一种依赖于编译器的不可靠的手段。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注