理解fprintf语法

Jon*_*oni 4 c printf

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

我遇到过这一行,但我不确定这意味着什么:

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

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

我有没有误解-在上下文中,它会如果线路是从阅读更有意义kinsh和写入金穗卡

a_p*_*han 10

fprintf函数定义如下:

int fprintf ( FILE * stream, const char * format, ... );
Run Code Online (Sandbox Code Playgroud)

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

  1. -意味着左对齐
  2. 之后的任何东西都.意味着精确度.
  3. *意味着精度不是硬编码的,而是作为参数提供的,该参数是格式字符串之后的第一个参数ndigits.
  4. lg会由C99编译器被视为double,Lg是长期双.(正如@mafso在评论中所提到的,lg是C89中的未定义行为)
  5. 实际数据在kins[i+j*n].

编辑

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

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