當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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