相关疑难解决方法(0)

为什么scanf()需要"%lf"用于双打,当printf()只用"%f"时可以吗?

为什么在阅读时scanf()需要l" %lf" double,何时printf()可以使用" %f",无论其参数是a double还是a float

示例代码:

double d;
scanf("%lf", &d);
printf("%f", d);
Run Code Online (Sandbox Code Playgroud)

c scanf length-modifiers

174
推荐指数
4
解决办法
29万
查看次数

printf的h和hh修饰符的用途是什么?

除了%hn%hhn(指定hhh指定指向对象的大小),格式说明符的hhh修饰符有printf什么意义?

由于标准要求的默认促销适用于可变函数,因此不可能将类型charshort(或其任何有符号/无符号变体)的参数传递给printf.

根据7.19.6.1(7),h修饰符:

指定以下d,i,o,u,x或X转换规范适用于short int或unsigned short int参数(该参数将根据整数提升进行提升,但其值应转换为short int或打印前的unsigned short int); 或者后续的n转换规范适用于指向short int参数的指针.

如果参数实际上是类型shortunsigned short,则促销int后转换回shortunsigned short将产生与促销相同的int而不进行任何转换.因此,对于类型的参数shortunsigned short,%d,%u等应给予相同的结果到%hd,%hu等.(并且同样地对于char类型和hh).

据我所知,h或者hh修饰符可能有用的唯一情况是当参数将其传递int到范围之外时,short或者unsigned short …

c printf promotions variadic-functions format-specifiers

55
推荐指数
3
解决办法
3万
查看次数

为什么printf()将float提升为double?

从上一个问题:

如果你试图传递floatprintf它,它会doubleprintf收到它之前被提升

printf()是一个可变函数吧?可变参数函数在传递之前是否会提升float参数double

c c++ floating-point printf variadic-functions

27
推荐指数
4
解决办法
3193
查看次数