scanf函数精髓:严格格式匹配。
常见的格式字符及说明:
格式字符 | 说明 |
%d | 从键盘输入十进制整数 |
%o | 从键盘输入八进制整数 |
%x | 从键盘输入十六进制整数 |
%c | 从键盘输入一个字符 |
%s | 从键盘输入一个字符串 |
%f和%e | 从键盘输入一个实数 |
1) %d、%o、%x、%f、%e归为一类,因为输入的都是数。显然它们的组合都是0~9等数字,十六进制会多了a~f或A~F,%f和%e多了一个小数点。当scanf的格式说明符为这5个中的其中一个时,从键盘输入的组合只能是上面那些东东,一旦遇到其它的输入符号就终止。也就是说其它的符号可以当做终止符或间隔符(当有多个数据输入时)。
2) %c,意为从键盘得到任一个字符,这下就好玩了,它除了能单个的接收数字、字母、小数点等字符外,还能接收制表符、空格、换行键(回车键)这三个通常被当做间隔符的字符。可以理解为通吃型(一次只能吃一个哦)。
3) %s,意为从键盘得到一个字符串。那字符串什么时候结束呢?显然了,%s不能像%c那样通吃了,这时三个间隔符会恢复他们的正职,遇到他们也就意为着一个字符串结束了。
举例:
程序的本意是输入x的值后,输入另一个字符给a。结果是输入1后按回车就直接打印了结果。貌似程序不给我们输入a的机会,是这样吗?不是的。a已经接收了一个字符,就是刚才敲的换行键(回车)。不信可以打印出a的ASCII码看看:
第一个输入1后,按换行键(回车);第二个输入1后,按空格键,再按回车键;第三个输入1后,按Tab键,再按回车。
那么怎样给a输入值呢?常见的方法有三种:其中任选一种就行了,不同之处自己找吧。
scanf还有许多要注意的地方,总之“严格格式匹配”之精髓不能丢!