Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 理解fprintf语法_C_Printf - Fatal编程技术网

C 理解fprintf语法

C 理解fprintf语法,c,printf,C,Printf,我对C知之甚少,但我正在努力理解一个用C编写的程序 我遇到过这条线,但不确定它的含义: fprintf(kinsh.fp, "%-.*lg", ndigits, kins[i+j*n]); 我认为这意味着“将一个带有ndigits小数位或有效数字(以较短者为准)的数字打印到kinsh(这是一个文件)。然而,我不知道kins,这是一个数组,在那里做什么 我是否误解了?在上下文中,如果该行是从kinsh读取并写入kins,则更有意义?fprintf函数的定义如下: int fprintf ( FI

我对C知之甚少,但我正在努力理解一个用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
文件的指针。
现在格式字符串
“%-.*lg”
是一个C格式字符串,这意味着:

  • -
    表示左对齐
  • 后面的任何内容都表示精度
  • *
    表示精度不是硬编码的,而是作为参数提供的,该参数是格式字符串后的第一个参数,即
    ndigits
  • C99编译器将
    lg
    视为
    double
    lg
    表示长双精度。(正如@mafso在评论中提到的,
    lg
    在C89中是未定义的行为)
  • 实际数据在
    kins[i+j*n]
  • 编辑

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


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

    这就是您要打印的内容。索引为i+j*n的kins值;读取
    %lg
    在C99中表示
    双精度
    (与
    %g
    相同),在C89中为UB。@mafso:我明白了,相应地更新答案。