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

我遇到过这条线,但不确定它的含义:

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

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

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

最佳答案

fprintf 函数定义如下:

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

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

  • 编辑

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

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

    10-07 18:51