什么后来%?

时间:2008-08-20 13:44:34

标签: c

我已经搜索了一下,但我没有得到一个特别直接的答案。在C(我猜C ++)中,如何确定使用printf时%后面的内容?例如:

double radius = 1.0;
double area = 0.0;
area = calculateArea( radius );
printf( "%10.1f     %10.2\n", radius, area );

我直接从一本关于C语言的书中看到了这个例子。这对我来说根本没有意义。你在哪里提出10.1f10.2f?有人可以解释一下吗?

8 个答案:

答案 0 :(得分:15)

http://en.wikipedia.org/wiki/Printf#printf_format_placeholders是维基百科对printf格式占位符的参考。 http://www.cplusplus.com/reference/clibrary/cstdio/printf.html也很有帮助

基本上以简单的形式,它是%[宽度​​]。[精度] [类型]。宽度允许您确保正在打印的变量至少是一定长度(对表等有用)。精度允许您指定打印数字的精度(例如小数位等),并告知C / C ++您给出的变量是什么(字符,整数,双精度等)。

希望这有帮助

<强>更新

使用您的示例澄清:

printf( "%10.1f     %10.2\n", radius, area );

%10.1f(指第一个参数:radius)表示将其设置为10个字符(即带空格的pad),并将其打印为带有一个小数位的浮点数。

%10.2(指第二个参数:area)表示使其长10个字符(如上所示)并打印两个小数位。

答案 1 :(得分:7)

man 3 printf
Linux系统上的

将为您提供所需的所有信息。您也可以在线查找这些手册页,例如http://linux.die.net/man/3/printf

答案 2 :(得分:2)

10.1f表示浮点数,10个字符宽,小数点后1位。 如果数字少于10位,则用空格填充。 10.2f是相同的,但在小数点后面有2个位置。

您有以下基本类型:

%d   - integer
%x   - hex integer
%s   - string
%c   - char (only one)
%f   - floating point (float)
%d   - signed int (decimal)
%i   - signed int (integer) (same as decimal).
%u   - unsigned int
%ld  - long (signed) int
%lu  - long unsigned int
%lld - long long (signed) int
%llu - long long unsigned int

编辑:@ Eli的回复(man 3 printf)中列出了其他几个。

答案 3 :(得分:2)

  

10.1f表示小数点后1位和小数点前10位的浮点。如果数字少于10位,则用空格填充。 10.2f是相同的,但在小数点后面有2个位置。

在我看过的每个系统上,从Unix到Rails迁移,情况并非如此。 @robintw表达得最好:

  

基本上是一个简单的形式,它是%[宽度​​]。[精度] [类型]。

也就是说,不是“在小数点之前的10个地方”,而是“10个地方,之前和之后,包括小数点。”

答案 4 :(得分:1)

简而言之,%告诉printf之后的那些值如何解释(或输出)以后出现的所有变量。在您的示例中,radius被解释为float(这是'f'),而10.1提供了有关打印时要使用的小数位数的信息。

有关可以与printf一起使用的所有修饰符的详细信息,请参阅this link

答案 5 :(得分:0)

10.1f 表示您希望显示 1 小于1的 1 ,并且显示的数字应 10 字符长。

答案 6 :(得分:0)

手册页包含您想要的信息。阅读以上内容:

printf( "%10.2f", 1.5 )

这将打印:

         1.50

鉴于:

printf("%.2f", 1.5 )

打印:

1.50

注意两者的理由。 类似地:

printf("%10.1f", 1.5 )

会打印:

        1.5

之后的任何数字。是你想要打印的精度。之前的任何数字。是左边距的距离。

答案 7 :(得分:-1)

其他人未提出的一个问题是 double 是否与 float 相同。在某些系统上,与float相比,double需要不同的格式说明符。尤其是因为传递的参数可能具有不同的大小。

 %f - float
 %lf - double
 %g - double