任何人都可以告诉我。我正在尝试理解Pascal代码,其中有一行writeln(arr[i]:0:14);
任何人都可以在C中告诉我这个含义吗?
答案 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])