在visual studio中用c语言以“%f”或“%lf”为参数调用scanf函数,并输入非数字字符进行错误检测时,发现scanf在读取浮点数失败时会将缓冲区开头的某几类字符吞掉。
目前发现会被吞的字符有n,i,na,in,除n和i以外其它英文字母在缓冲区的开头都不会被吞。当且仅当会被吞的字符出现在缓冲区开头时才会被吞,如输入单词“linux”可以被正常接收。
目前仅发现float和double类型会出现此bug,其它类型暂未发现相关现象。
在visual studio中将语言换成C++或将scanf换成scanf_s仍会出现此bug,在Dev C上编译相同的代码则不会出现类似现象,初步判定是visual studio软件本身的问题。