我对C知之甚少,但我正在尝试理解用它写的程序。
我遇到过这一行,但我不确定它是什么意思:
fprintf(kinsh.fp, "%-.*lg", ndigits, kins[i+j*n]);
我认为这意味着“使用 ndigits 小数位或有效数字(以较短者为准)打印一个数字到 kinsh (这是一个文件)。但是,我不喜欢我不知道 kins 是一个数组,正在那里做什么。
我是否误解了 - 在上下文中,如果该行正在读取 kinsh 并写入 kins 会更有意义吗?
答案 0 :(得分:10)
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