2018.04.06 | C与C++ | 0 赞 | 0 条评论

C++在用cin做输入的时候,尤其是需要输入int型值的时候,往往需要做验证与处理。而对于异常值,则需要先清理缓冲区,再准备下一次输入。

对于清理缓冲区,中文世界的方法有一下几种(或者混着用):

cin.clear();
cin.ignore();
cin.sync();
fflush(stdin);

但是这几种方法都各有各的缺点,不是会造成重复输出错误信息,就是会造成不断的死循环。真正理想的解决方案,StackOverflow上给了很好的解答。那就是混合使用cin.ignore(INT_MAX, 'n')和cin.clear().

查看更多 ->


2018.03.13 | C与C++ | 1 赞 | 1 条评论

1、gets在scanf前调用,这种调用一般不会出现什么问题,可以正常输入。

2、scanf在gets前调用,这种情况就会出现问题,当输入完scanf中的变量时,运行到gets函数,则不让输入任何字符

出现此问题的原因是gets函数接收了scanf输入完后的回车符,解决的办法是在scanf和gets中间,用getchar函数接收掉回车符,这样就不会出现任何问题了。

查看更多 ->