yuv*_*uva 8 c precision io formatting printf
我正在重新编码printf
,现在我被精度标志阻止了一会儿。所以我读到类型转换说明符d
为 1时的默认精度:
所以我认为%.d
and之间没有区别%.1d
,但是当我测试时:
printf(".d =%.d, .1d= %.1d", 0, 0);
Run Code Online (Sandbox Code Playgroud)
我确实找到了一个:
printf(".d =%.d, .1d= %.1d", 0, 0);
Run Code Online (Sandbox Code Playgroud)
如果.
在%
没有指定精度的情况下使用after ,则将其设置为零。
.
后跟整数或 *,或两者都不指定转换的精度。在使用 * 的情况下,精度由 int 类型的附加参数指定。如果此参数的值为负,则将其忽略。如果既不使用数字也不使用 *,则精度为零。
1
如果您使用%d
(不使用.
),则默认为:
printf("d = %d, 1d= %1d", 0, 0);
# Output: d = 0, 1d= 0
Run Code Online (Sandbox Code Playgroud)
C18 标准 - ISO/IEC 9899:2018 -(强调我的)规定:
"一个可选精度,它给出了 d、i、o、u、x 和 X 转换出现的最小位数,a、A、e、E 的小数点字符后出现的位数, f 和 F 转换,g 和 G 转换的最大有效位数,或 s 转换要写入的最大字节数。精度采用句点 (.) 后跟星号 * (稍后描述)或通过可选的非负十进制整数;如果仅指定了句点,则精度为零。 如果精度与任何其他转换说明符一起出现,则行为未定义。”
来源:C18,第 7.21.6.1/4 节
手段%.d
等于%.0d
和不同%.1d
。
此外:
"d,i - int 参数以 [-]dddd 样式转换为有符号十进制。精度指定要出现的最小位数;如果转换的值可以用更少的位数表示,则用前导零扩展. 默认精度为 1.以零精度转换零值的结果是没有字符。 ”
来源:C18,第 7.21.6.1/8 节
这意味着如果您在调用中0
使用 using转换值,则保证结果不会打印任何字符(这与您的测试体验相匹配)。%.d
printf()
归档时间: |
|
查看次数: |
151 次 |
最近记录: |