我对 C 知之甚少,但我正在尝试理解用它编写的程序。
我遇到过这条线,但不确定它的含义:
fprintf(kinsh.fp, "%-.*lg", ndigits, kins[i+j*n]);
我认为这意味着“将带有 ndigits 个小数位或有效数字(以较短者为准)的数字打印到 kinsh(这是一个文件)。但是,我不知道 kins,这是一个数组,在那里做什么。
我是否误解了 - 在上下文中,如果该行是从 kinsh 读取并写入 kins 会更有意义吗?
最佳答案
fprintf 函数定义如下:
int fprintf ( FILE * stream, const char * format, ... );
所以,
kinsh.fp
是 FILE
指针。现在格式字符串
"%-.*lg"
是一个 C 格式字符串,这意味着:-
表示左对齐 .
之后的任何内容都表示精度。 *
意味着精度不是硬编码的,而是作为参数提供的,它是格式字符串之后的第一个参数,即 ndigits
。 lg
将被 C99 编译器视为 double
, Lg
用于 long double。 (正如@mafso 在评论中提到的,lg
是 C89 中的未定义行为) kins[i+j*n]
中。 编辑
什么是:
该语句在
long double
指向的文件中写入存储在 kins[i+j*n]
的 ndigits
值,具有 kinsh.fp
精度和左对齐。一般格式字符串格式为:
%[parameter][flags][width][.precision][length]type