谁能告诉我。我试图理解其中有一行的 Pascal 代码writeln(arr[i]:0:14);
谁能告诉我这在 C 中的含义?
这是实数的一种格式:
writeln( foo:N:M );
打印foo
字段宽度中的值N
并显示M
小数位。所以C
你会使用:
printf( "%N.Mf\n", foo );
如果N
is 太小而无法容纳格式化的值(给定 的大小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 );
它将以右对齐方式打印 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])