Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 帕斯卡语中的arr[i]:0:14是什么意思?_C_Pascal - Fatal编程技术网

C 帕斯卡语中的arr[i]:0:14是什么意思?

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

谁能告诉我吗。我试图理解一个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_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是的,更简单,我一直在想这个。我已经很久没有需要或使用它了,我不确定。为了完整起见,我把它添加到了答案中。