理解fprintf语法

时间:2015-02-06 14:12:55

标签: c printf

我对C知之甚少,但我正在尝试理解用它写的程序。

我遇到过这一行,但我不确定它是什么意思:

fprintf(kinsh.fp, "%-.*lg", ndigits, kins[i+j*n]);

我认为这意味着“使用 ndigits 小数位或有效数字(以较短者为准)打印一个数字到 kinsh (这是一个文件)。但是,我不喜欢我不知道 kins 是一个数组,正在那里做什么。

我是否误解了 - 在上下文中,如果该行正在读取 kinsh 并写入 kins 会更有意义吗?

1 个答案:

答案 0 :(得分:10)

fprintf函数定义如下:

int fprintf ( FILE * stream, const char * format, ... );

因此,kinsh.fpFILE指针。 现在,格式字符串"%-.*lg"是一个C格式的字符串,暗示了这一点:

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

    什么是: 该语句在long double指向的文件中写入kins[i+j*n]存储在ndigitskinsh.fp精度和左对齐的值。

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