分解 C 中的 %5d%*.*f 格式说明符以实现精确的输出格式

问题描述 投票:0回答:1

我正在使用 C 语言处理格式化输出,并遇到了格式字符串

%5d%*.*f
。虽然我了解整数
%d
和浮点数
%f
的基本用法,但我特别寻求澄清:

%5d

  • %5d 中的 5 代表什么?
  • 它如何控制整数的输出格式?

%*.*f

  • (*)
    中使用两个星号
    %*.*f
    的目的是什么?
  • 这些星号如何与传递给
    printf
    的参数交互?
  • 它们对浮点输出格式提供什么级别的控制?

我使用的是符合 C11 标准的 C 编译器。

这是一个代码片段,说明了我对格式字符串的使用:

#include <stdio.h>
int main()
{
    int val =10;
    float val1 = 56.40;
    printf("%d%*.*f", val,val,val-8,val1);
    
}

输出为 10 56.40

%5d%*.*f 

的实际含义是什么
#include <stdio.h>
int main()
{
    int val =10;
    float val1 = 56.40;
    printf("%d%f", val,val,val-8,val1);
    
}

输出为 100.000000

为什么输出会因为输出而变得不同

%d%f

Code containing %d%f code, which giving output as 100.0000

Code containing %d%*.*f code, which giving output as 10    56.40

c gcc floating-point printf
1个回答
2
投票
  • %5d
    表示打印
    int
    ,最小字段宽度为 5。该值不是 5 个字符宽,它将用空格填充。您要么无法分辨,要么您没有粘贴示例输出中的空格。

  • %*.*f
    表示打印
    float
    ,其最小字段宽度和精度(
    .
    之后的数字)作为参数提供,如
    *
    所示。在这种情况下,字段宽度为
    val
    ,精度为
    val-8

您的第二个代码示例根本就是不正确的用法。您声称传递一个 int 和 float,但却传递了 3 个 int 和一个 float。

© www.soinside.com 2019 - 2024. All rights reserved.