【问题标题】:Understand fprintf syntax了解 fprintf 语法
【发布时间】:2015-02-06 23:11:28
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 这就是你要打印的东西。具有 i+j*n 索引的 kins 值;阅读docs

标签: c printf


【解决方案1】:

fprintf函数定义如下:

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

所以,kinsh.fpFILE 指针。 现在格式字符串 "%-.*lg" 是一个 C 格式字符串,这意味着:

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

编辑

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

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

【讨论】:

  • %lg 在 C99 中表示 double(与 %g 相同),在 C89 中是 UB。
  • @mafso:我明白了,相应地更新答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-25
  • 2015-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多