代码中出现了两个scanf()输入,而第二次的scanf("%c", &a),并没有执行输入操作,而是直接跳过了,为何会这样呢?
经过在网上对于相关问题的查找,得到的原因是:
%d:会忽略缓冲区开头的空白符(空格、回车、制表符等)(无论有几个);
%c:直接读取缓冲区的第一个字符(无论这个字符是什么);
所以在使用 scanf("%c", &a) 的时候,要确保我们的缓冲区已经没有键入了,可以使用下面2个解决方法:
解决方案1:使用getchar()函数,清除缓冲区已有的字符,但这个方法只能清除一个;
解决方案2:利用函数fflush( )清除缓冲区,示例:fflush(stdin);
注:新版vs可能不支持fflush( )函数,可以试一下替换成rewind(stdin)函数;
具体问题的描述与解决方案可以参考: