当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C语言 fprintf用法及代码示例


C语言stdio头文件(stdio.h)中fprintf函数的用法及代码示例。

用法:

int fprintf ( FILE * stream, const char * format, ... );
将格式化的数据写入流
写入由指向的C字符串格式。如果格式包括格式说明符(以开头的子序列%),后面的其他参数格式格式化并插入结果字符串中,以替换其各自的说明符。

之后格式参数,该函数至少期望与以下参数指定的数量一样多的附加参数格式

参数

stream
指向一个指针FILE标识输出流的对象。
format
包含要写入流的文本的C字符串。
它可以选择包含嵌入式格式说明符这些值将替换为后续附加参数中指定的值,并按要求设置格式。

A 格式说明符遵循此原型:

%[flags][width][.precision][length]specifier

哪里指定符最后是最重要的组成部分,因为它定义了类型及其相应参数的解释:
说明符输出示例
d 或者 i有符号十进制整数392
u无符号十进制整数7235
o无符号八进制610
x无符号十六进制整数7fa
X无符号十六进制整数(大写)7FA
f十进制浮点,小写392.65
F十进制浮点,大写392.65
e科学计数法(尾数/ index ),小写3.9265e+2
E科学计数法(尾数/ index ),大写3.9265E+2
g使用最短的表示形式:%e或者%f392.65
G使用最短的表示形式:%E或者%F392.65
a十六进制浮点,小写-0xc.90fep-2
A十六进制浮点,大写-0XC.90FEP-2
cCharactera
s字串sample
p指针地址b8000000
n什么都没打印。
相应的参数必须是指向signed int
到目前为止写入的字符数存储在指定的位置。
%A %其次是%角色会写一个%到流。%

这个格式说明符还可以包含sub-specifiers:标志宽度。精确修饰符(按此顺序),它们是可选的,并遵循以下规范:

标志描述
-在给定的字段宽度内为Left-justify;右对齐是默认设置(请参见宽度sub-specifier)。
+强制在结果前加上加号或减号(+或者-),即使是正数也是如此。默认情况下,只有负数前面带有一个-标志。
(空间)如果不写任何符号,则在该值之前插入一个空格。
#用于ox或者X指定值的开头00x或者0X分别针对不等于零的值。
用于aAeEfFg或者G即使没有更多的数字,它也会强制写入的输出包含小数点。默认情况下,如果没有数字跟随,则不写小数点。
0Left-pads带有零的数字(0),而不是指定填充时的空格(请参见宽度sub-specifier)。

宽度描述
(数字)最少要打印的字符数。如果要打印的值小于此数字,则结果将用空格填充。即使结果较大,该值也不会被截断。
*宽度不是在格式字符串中指定的,而是作为必须格式化的参数之前的附加整数值参数。

。精确描述
.数字对于整数说明符(diouxX):precision指定要写入的最小位数。如果要写入的值短于该数字,则结果将以前导零填充。即使结果更长,该值也不会被截断。的精度0表示没有字符被写为值0
为了aAeEfF说明符:这是要打印的位数小数点(默认为6)。
为了gG说明符:这是要打印的最大有效位数。
为了s:这是要打印的最大字符数。默认情况下,将打印所有字符,直到遇到结尾的空字符为止。
如果指定的期间没有明确的值精确0假设。
.*精度不是在格式字符串中指定的,而是作为必须格式化的参数之前的附加整数值参数。

这个长度sub-specifier修改数据类型的长度。这是一个图表,显示了用于解释带有或不带有相应参数的类型长度说明符(如果使用其他类型,则在允许的情况下执行正确的类型提升或转换):
说明符
长度d iu o x Xf F e E g G a Acspn
(没有)intunsigned intdoubleintchar*void*int*
hhsigned charunsigned charsigned char*
hshort intunsigned short intshort int*
llong intunsigned long intwint_twchar_t*long int*
lllong long intunsigned long long intlong long int*
jintmax_tuintmax_tintmax_t*
zsize_tsize_tsize_t*
tptrdiff_tptrdiff_tptrdiff_t*
Llong double
请注意c说明符需要一个int(或者wint_t)作为参数,但会正确转换为char值(或wchar_t),然后对其进行格式化以进行输出。

注意:黄色行表示指定符和C99引入的sub-specifiers。看<cinttypes>用于扩展类型的说明符。
... (additional arguments)
取决于格式字符串,函数可能需要一系列附加参数,每个参数都包含一个用于替换a的值格式说明符在里面格式字符串(或指向存储位置的指针,用于n)。
这些参数至少应与格式说明符。该函数将忽略其他参数。

返回值

成功后,将返回写入的字符总数。

如果发生写入错误,则错误指示(ferror)设置,并返回负数。

如果在写入宽字符时发生多字节字符编码错误,errno被设定为EILSEQ并返回负数。

示例

/* fprintf example */
#include <stdio.h>

int main ()
{
   FILE * pFile;
   int n;
   char name [100];

   pFile = fopen ("myfile.txt","w");
   for (n=0 ; n<3 ; n++)
   {
     puts ("please, enter a name: ");
     gets (name);
     fprintf (pFile, "Name %d [%-10.10s]\n",n+1,name);
   }
   fclose (pFile);

   return 0;
}


本示例提示用户输入3次名称,然后将其写入myfile.txt每行以固定的长度(共19个字符+换行符)组成。
使用了两种格式标签:
%d:有符号十进制整数
%-10.10s:左对齐(-),至少十个字符(10),最多十个字符(.10), 细绳 (s)。
假设我们已经进入JohnJean-FrancoisYoko作为3个名字,myfile.txt将包含:

Name 1 [John      ] 
Name 2 [Jean-Franc] 
Name 3 [Yoko      ]

有关格式化的更多示例,请参见printf


相关用法


注:本文由纯净天空筛选整理自C标准库大神的英文原创作品 C fprintf function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。