(1) 格式说明符中,可以指定数据的宽度,但不能指定数据的精度。例:
1
2
3
|
float a; scanf (“%10f”,&a); //正确 scanf (“%10.2f”,&a); //错误 |
(2) 输入long类型数据时必须使用%ld,输入double数据必须使用%lf或%le。
(3) 附加格式说明符”*”使对应的输入数据不赋给相应的变量。
scanf()函数所用的转换说明符与printf()所用的几乎完全相同。主要区别在于printf()把%f、%e、%E、%g、%G同时用于float类型和double类型,而scanf()只是把他们用于float类型,而用于double类型时要求使用l(字母l)修饰符。
转换说明符 | |
%c | 把输入解释成一个字符 |
%d | 把输入解释成一个有符号十进制整数 |
%e,%f,%g,%a | 把输入解释成一个浮点数(%a是C99的标准) |
%E,%F,%G,%A | 把输入解释成一个浮点数(%A是C99的标准) |
%i | 把输入解释成一个有符号十进制整数 |
%o | 把输入解释成一个有符号的八进制整数 |
%p | 把输入解释成一个指针(一个地址) |
%s | 把输入解释成一个字符串:输入的内容以第一个非空白字符作为开始,并且包含直到下一个空白字符的全部字符 |
%u | 把输入解释成一个无符号十进制整数 |
%x,%X | 把输入解释称一个有符号十六进制整数 |
*修饰符在scanf中()的用法:
*在scanf()中提供截然不同的服务,当把它放在%和说明符字母之间时,它使函数跳过相应的输入项目
一个容易出错的自由落体计算代码
1 #include<stdio.h> 2 3 #include<math.h> //后面求次方需要用到pow()函数 4 5 int main() { 6 7 double m,n,h,l; //pow()函数要求参与数和返回值均为double类型 8 9 while(1) { 10 11 printf("请输入高度: "); 12 13 scanf("%lf",&m); //必须是lf%,%F会出现逻辑错误,输入要严格区分%lf和%f 14 15 printf("请输入次数: "); 16 17 scanf("%lf",&n); 18 19 h=m*pow(0.5,n); 20 21 l=m+m*((1-pow(0.5,n))/0.5); 22 23 printf("跳起%.2f 米,总运动长度%.2f 米 ------------------- ",h,l); //输出大多数情况下LF%和F%是等同的 24 25 } 26 27 return 0; 28 29 }