C语言stdio头文件(stdio.h)中fprintf函数的用法及代码示例。
用法:
int fprintf ( FILE * stream, const char * format, ... );
将格式化的数据写入流
之后格式参数,该函数至少期望与以下参数指定的数量一样多的附加参数格式。
参数
- 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或者%f 392.65 G 使用最短的表示形式:%E或者%F 392.65 a 十六进制浮点,小写 -0xc.90fep-2 A 十六进制浮点,大写 -0XC.90FEP-2 c Character a s 字串 sample p 指针地址 b8000000 n 什么都没打印。
相应的参数必须是指向signed int。
到目前为止写入的字符数存储在指定的位置。% A %其次是%角色会写一个%到流。 %
这个格式说明符还可以包含sub-specifiers:标志,宽度,。精确和修饰符(按此顺序),它们是可选的,并遵循以下规范:
标志 描述 - 在给定的字段宽度内为Left-justify;右对齐是默认设置(请参见宽度sub-specifier)。 + 强制在结果前加上加号或减号(+或者-),即使是正数也是如此。默认情况下,只有负数前面带有一个-标志。 (空间) 如果不写任何符号,则在该值之前插入一个空格。 # 用于o,x或者X指定值的开头0,0x或者0X分别针对不等于零的值。
用于a,A,e,E,f,F,g或者G即使没有更多的数字,它也会强制写入的输出包含小数点。默认情况下,如果没有数字跟随,则不写小数点。0 Left-pads带有零的数字(0),而不是指定填充时的空格(请参见宽度sub-specifier)。
宽度 描述 (数字) 最少要打印的字符数。如果要打印的值小于此数字,则结果将用空格填充。即使结果较大,该值也不会被截断。 * 宽度不是在格式字符串中指定的,而是作为必须格式化的参数之前的附加整数值参数。
。精确 描述 .数字 对于整数说明符(d,i,o,u,x,X):precision指定要写入的最小位数。如果要写入的值短于该数字,则结果将以前导零填充。即使结果更长,该值也不会被截断。的精度0表示没有字符被写为值0。
为了a,A,e,E,f和F说明符:这是要打印的位数后小数点(默认为6)。
为了g和G说明符:这是要打印的最大有效位数。
为了s:这是要打印的最大字符数。默认情况下,将打印所有字符,直到遇到结尾的空字符为止。
如果指定的期间没有明确的值精确,0假设。
.* 精度不是在格式字符串中指定的,而是作为必须格式化的参数之前的附加整数值参数。
这个长度sub-specifier修改数据类型的长度。这是一个图表,显示了用于解释带有或不带有相应参数的类型长度说明符(如果使用其他类型,则在允许的情况下执行正确的类型提升或转换):
说明符 长度 d i u o x X f F e E g G a A c s p n (没有) int unsigned int double int char* void* int* hh signed char unsigned char signed char* h short int unsigned short int short int* l long int unsigned long int wint_t wchar_t* long int* ll long long int unsigned long long int long long int* j intmax_t uintmax_t intmax_t* z size_t size_t size_t* t ptrdiff_t ptrdiff_t ptrdiff_t* L long double
注意:黄色行表示指定符和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)。
假设我们已经进入John,Jean-Francois和Yoko作为3个名字,myfile.txt将包含:
Name 1 [John ] Name 2 [Jean-Franc] Name 3 [Yoko ] |
有关格式化的更多示例,请参见printf。
相关用法
- C语言 remove用法及代码示例
- C语言 rename用法及代码示例
- C语言 tmpfile用法及代码示例
- C语言 tmpnam用法及代码示例
- C语言 fclose用法及代码示例
- C语言 fflush用法及代码示例
- C语言 fopen用法及代码示例
- C语言 freopen用法及代码示例
- C语言 setbuf用法及代码示例
- C语言 setvbuf用法及代码示例
- C语言 fscanf用法及代码示例
- C语言 printf用法及代码示例
- C语言 scanf用法及代码示例
- C语言 snprintf用法及代码示例
- C语言 sprintf用法及代码示例
- C语言 sscanf用法及代码示例
- C语言 vfprintf用法及代码示例
- C语言 vfscanf用法及代码示例
- C语言 vprintf用法及代码示例
- C语言 vscanf用法及代码示例
- C语言 vsnprintf用法及代码示例
- C语言 vsprintf用法及代码示例
- C语言 vsscanf用法及代码示例
- C语言 fgetc用法及代码示例
- C语言 fgets用法及代码示例
- C语言 fputc用法及代码示例
- C语言 fputs用法及代码示例
- C语言 getc用法及代码示例
- C语言 getchar用法及代码示例
- C语言 gets用法及代码示例
- C语言 putc用法及代码示例
- C语言 putchar用法及代码示例
- C语言 puts用法及代码示例
- C语言 ungetc用法及代码示例
- C语言 fread用法及代码示例
- C语言 fwrite用法及代码示例
- C语言 fgetpos用法及代码示例
- C语言 fseek用法及代码示例
- C语言 fsetpos用法及代码示例
- C语言 ftell用法及代码示例
- C语言 rewind用法及代码示例
- C语言 clearerr用法及代码示例
- C语言 feof用法及代码示例
- C语言 ferror用法及代码示例
- C语言 perror用法及代码示例
注:本文由纯净天空筛选整理自C标准库大神的英文原创作品 C fprintf function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。