c语言scanf用法疑问

若x和y均定义为int 型,z定义为double型,以下不合法的scanf()函数调用
) o
A.scanf ("%d%1x, %le”, &x, &y, &z);
B.scanf(“%2d*%d%lf”,&x,&y,&z);
C.scanf ("%X%*d%0",&x, &y);
D.scanf(%x%o%6.2f”,&x,&y,&z);

D项错误,double类型应该使用 %lf 输入,其次输入时不能控制浮点数的精度。

分析:

  • A:scanf ("%d%1x, %le”, &x, &y, &z);接收十进制整数,接收1位十六进制,,分割符号,接收一个科学计数法表示的长浮点数(eg: 1.2e-2
    示例输入: 123a,1.2e-1 对应值为 23 10 0.120000
  • B:scanf(“%2d*%d%lf”,&x,&y,&z);接收2个十进制整数,*分割符号,接收十进制整数,接收一个长浮点数(注意,这里浮点数与前面的整数通过空格或回车分隔)。
    示例输入:12*12 1, 对应值为 12 12 1.000000