0

谁能告诉我。我试图理解其中有一行的 Pascal 代码writeln(arr[i]:0:14);

谁能告诉我这在 C 中的含义?

4

2 回答 2

3

这是实数的一种格式:

writeln( foo:N:M );

打印foo字段宽度中的值N并显示M小数位。所以C你会使用:

printf( "%N.Mf\n", foo );

如果Nis 太小而无法容纳格式化的值(给定 的大小M),它将使用打印数字所需的空间。

在 Pascal 中,您可能拥有N和/或M成为变量。在这种情况下,C您可以按如下方式创建格式字符串:

char my_fmt[50];  // could pick a "smarter" length for the string; this is just for example

sprintf( my_fmt, "%%%d.%df\n", N, M );
printf( my_fmt, foo );

或者更简单:

printf( "%*.*f\n", N, M, foo );
于 2013-07-02T14:35:50.660 回答
0

它将以右对齐方式打印 arr[i],最小总宽度为 0,小数分隔符后有 14 位精度(旧 skool pascal 案例中的一个点)。

请注意,总宽度为 0 实质上会禁用对齐,但它必须存在才能指定小数分隔符精度。

双格式参数意味着 arr[i] 必须是浮点类型。(或定点货币类型,德尔福)

将数组索引从 Pascal 转换为 C 时要小心。Pascal 数组可能具有非零下限,然后您必须相应地转换数组索引。

var xx : array [m..n] of double 

变成

double xx[n-m+1];  

通过减去 m 校正所有数组索引。喜欢

arr[x-m])
于 2013-07-02T14:39:21.603 回答