vs中cin.sync()和fflush(stdin)失效的原因:
(1)c++风格的cin.sync()在vs中失效!
在C++的标准中,cin.sync()是清空缓冲区,理论上调用这个函数可以清空,但在实际中是否清空缓冲区取决于编译器。
如果使用其他的编译器是可能可以的,如:vc++等,但在vs中的编译器就不行。
(2)fflush(stdin);
c语言风格的flush(stdin)在vs的编译器中没有效果,在其他编译器中可能会有效果,如:vc++
在vs中有效的清空输入缓冲区方式。这里提供如下两种方法可以在vs中清空缓冲区:
一、第一种办法,自已定义一个函数:
void ClearBuffer()
{
char temp;
while ((temp = getchar()) != '\n');
}
//相当于是一个一个字符去清空缓冲区,直到遇到回车符结束,使用前调用函数ClearBuffer()即可。
二、第二种,比较万能,适用于多个编译器。
cin.ignore(std::numeric_limits< streamsize >::max(), '\n');
使用时输入这一行即可。