C 理解fprintf语法
我对C知之甚少,但我正在努力理解一个用C编写的程序 我遇到过这条线,但不确定它的含义: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
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:我明白了,相应地更新答案。