可变参数必须是指针,用C标准的话说,scanf会把可变参数当作指针,将成功读取的元素存放到可变参数所指向的内存空间中(using subsequent arguments as pointers to the objects to receive the converted input) 初学者最容易犯的错误就是少写了取地址运算符&,结果往往就是程序运行时收到一条著名的错误:segmentation fault
最后就是格式化字符串如何匹配键盘输入的内容。基本规则是: scanf会按照格式化字符串的内容来匹配你的输入,普通字符匹配输入的普通字符,%则按其含义匹配输入的字符。如果匹配、读取成功,则继续匹配、读取剩余字符串,否则函数就返回(If a directive fails, the function returns)。
还有两条对基本规则的补充:
1. 除了%c,scanf在寻找读取数据的起始位置时,会跳过输入字符串中的所有空白字符(空格、tab键、换行符等),也就是说,scanf会从第一个非空白字符开始读取(Input white-space characters are skipped, unless the specification includes a[,c,ornspecifier.)。比如,
2. 格式化字符串中如果包含了空白字符,则它匹配输入字符串中的0个或多个空白字符(A directive composed of white-space character(s) is executed by reading input up to the first non-white-space character)