在Pascal中arr [i]:0:14的含义是什么?

时间:2013-07-02 14:29:46

标签: c pascal

任何人都可以告诉我。我正在尝试理解Pascal代码,其中有一行writeln(arr[i]:0:14);

任何人都可以在C中告诉我这个含义吗?

2 个答案:

答案 0 :(得分:3)

这是实数的格式:

writeln( foo:N:M );

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

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

如果N太小而无法容纳格式化的值(给定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 );

答案 1 :(得分:0)

它将右对齐打印arr [i]到最小总宽度为0,在小数分隔符后面有14位精度(旧skool pascal情况下的一个点)。

请注意,总宽度为0基本上会禁用对齐,但必须能够指定小数分隔符精度。

双重格式化参数意味着arr [i]必须是float类型。 (或定点货币类型,在Delphi中)

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

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

变为

double xx[n-m+1];  

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

arr[x-m])