scanf可能遇到的陷阱

今天做题过程中发现的,总结一下


   先看例子:

scanf可能遇到的陷阱





scanf可能遇到的陷阱


 


换言之,第二个%c读入的是空格,导致第3个%d类型不匹配,没有赋上值


再看:

scanf可能遇到的陷阱



scanf是从标准输入缓冲区中读取输入的数据,而%c的字符输入格式会接收回车和空格字符,在输入第一个scanf时输入字符后按回车结束,输入缓冲中保存了这个回车符,遇到第二个scanf时,它自动把这个回车符赋给了ch2 (回车只是一种特殊的字符,属于字符型,所以可以赋上值)


总结就是:char会读取缓冲区的空格和回车,谨记!

那么怎么处理呢?
方法就是读入数据时加空格或者getchar()及时清理

scanf可能遇到的陷阱


scanf可能遇到的陷阱