c primer plus中对scanf进行了一番详解:
假定使用了%d说明符来读取一个整数。scanf()函数开始试图读取一个输入字符,它跳过空白字符直到遇到一个非空白字符,当碰到整数或者+或者-时,它就保存并读取下一个字符;如果接下来的字符是一个数字,它就保存,并读取下一个字符直到遇到一个非数字的字符。如果遇到非数字字符,它就得出结论:已经读到整数的尾部。并把这个非数字字符放回输入。这就意味着当程序下一次开始读取输入时,他将从前面被放弃的那个非数字字符开始。之前读取到的内容将放入变量中。
如果使用%x,则将a-f和A-F也放入所能识别的字符中。
其他类似上面的过程。