了解 fprintf 语法
Understand fprintf syntax
我对 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]
.
编辑
是做什么的:
该语句在 kinsh.fp
.
指向的文件中以 ndigits
精度和左对齐写入存储在 kins[i+j*n]
的 long double
值
一般格式字符串格式为:%[parameter][flags][width][.precision][length]type
我对 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]
.
编辑
是做什么的:
该语句在 kinsh.fp
.
ndigits
精度和左对齐写入存储在 kins[i+j*n]
的 long double
值
一般格式字符串格式为:%[parameter][flags][width][.precision][length]type