C 帕斯卡语中的arr[i]:0:14是什么意思?
谁能告诉我吗。我试图理解一个Pascal代码,其中有一行C 帕斯卡语中的arr[i]:0:14是什么意思?,c,pascal,C,Pascal,谁能告诉我吗。我试图理解一个Pascal代码,其中有一行writeln(arr[I]:0:14) 有谁能告诉我这在C中的含义吗?这是一种实数格式: writeln( foo:N:M ); 在宽度为N的字段中打印foo的值,并显示M小数位。因此,在C中,您将使用: printf( "%N.Mf\n", foo ); 如果N太小,无法容纳格式化值(给定M的大小),它将使用打印数字所需的空间 在Pascal中,可以有N和/或M变量。在这种情况下,可以在C中创建格式字符串,如下所示: char my
writeln(arr[I]:0:14)代码>
有谁能告诉我这在C中的含义吗?这是一种实数格式:
writeln( foo:N:M );
在宽度为N
的字段中打印foo
的值,并显示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 );
这是一种实数格式:
writeln( foo:N:M );
在宽度为N
的字段中打印foo
的值,并显示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 );
它将以正确的对正方式打印arr[i],最小总宽度为0,小数点分隔符后有14位精度(旧skool-pascal案例中的一个点)
请注意,总宽度为0基本上会禁用对正,但必须存在对正才能指定小数分隔符精度
双格式参数意味着arr[i]必须是浮点类型。(或Delphi中的定点货币类型)
将数组索引从Pascal转换为C时要小心。Pascal数组可能有一个非零的下限,然后必须相应地转换数组索引
var xx : array [m..n] of double
变成
double xx[n-m+1];
通过减去m校正所有阵列索引。像
arr[x-m])
它将以正确的对正方式打印arr[i],最小总宽度为0,小数点分隔符后有14位精度(旧skool-pascal案例中的一个点)
请注意,总宽度为0基本上会禁用对正,但必须存在对正才能指定小数分隔符精度
双格式参数意味着arr[i]必须是浮点类型。(或Delphi中的定点货币类型)
将数组索引从Pascal转换为C时要小心。Pascal数组可能有一个非零的下限,然后必须相应地转换数组索引
var xx : array [m..n] of double
变成
double xx[n-m+1];
通过减去m校正所有阵列索引。像
arr[x-m])
在Pascal中,n和m可以是变量。因此,虽然示例中的简单情况可能相同,但可能需要构造格式化字符串。您不需要sprintf()
来生成格式化字符串:printf(“%*.*f\n”,n,M,foo)代码>简单多了,你不觉得吗?@ElchononEdelson是的,更简单,我一直在想这个。我已经很久没有需要或使用它了,我不确定。为了完整性,我把它添加到了答案中。在Pascal中,n和m可以是变量。因此,虽然示例中的简单情况可能相同,但可能需要构造格式化字符串。您不需要sprintf()
来生成格式化字符串:printf(“%*.*f\n”,n,M,foo)代码>简单多了,你不觉得吗?@ElchononEdelson是的,更简单,我一直在想这个。我已经很久没有需要或使用它了,我不确定。为了完整起见,我把它添加到了答案中。