了解 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 格式字符串,这意味着:

  1. -表示左对齐
  2. . 之后的任何内容都表示精度。
  3. * 意味着精度不是硬编码的,而是作为参数提供的,它是格式字符串之后的第一个参数,即 ndigits.
  4. lg 将被 C99 编译器视为 doubleLg 用于 long double。 (正如@mafso 在评论中提到的,lg 是 C89 中的未定义行为)
  5. 实际数据在kins[i+j*n].

编辑

是做什么的: 该语句在 kinsh.fp.

指向的文件中以 ndigits 精度和左对齐写入存储在 kins[i+j*n]long double

一般格式字符串格式为:%[parameter][flags][width][.precision][length]type