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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。