
- C標準庫
- C庫 - 首頁
- C庫 - <assert.h>
- C庫 - <complex.h>
- C庫 - <ctype.h>
- C庫 - <errno.h>
- C庫 - <fenv.h>
- C庫 - <float.h>
- C庫 - <inttypes.h>
- C庫 - <iso646.h>
- C庫 - <limits.h>
- C庫 - <locale.h>
- C庫 - <math.h>
- C庫 - <setjmp.h>
- C庫 - <signal.h>
- C庫 - <stdalign.h>
- C庫 - <stdarg.h>
- C庫 - <stdbool.h>
- C庫 - <stddef.h>
- C庫 - <stdio.h>
- C庫 - <stdlib.h>
- C庫 - <string.h>
- C庫 - <tgmath.h>
- C庫 - <time.h>
- C庫 - <wctype.h>
- C程式設計資源
- C程式設計 - 教程
- C - 有用資源
C庫函式 - vfprintf()
描述
C庫函式int vfprintf(FILE *stream, const char *format, va_list arg) 使用傳遞給它的引數列表將格式化輸出傳送到流。
宣告
以下是vfprintf()函式的宣告。
int vfprintf(FILE *stream, const char *format, va_list arg)
引數
stream − 這是指向FILE物件的指標,它標識流。
format − 這是包含要寫入流的文字的C字串。它可以選擇包含嵌入的格式標籤,這些標籤將被後續附加引數中指定的值替換,並根據請求進行格式化。格式標籤原型:%[flags][width][.precision][length]specifier,如下所述:
序號 | 說明符 & 輸出 |
---|---|
1 |
c 字元 |
2 |
d 或 i 帶符號十進位制整數 |
3 |
e 使用e字元的科學記數法(尾數/指數) |
4 |
E 使用E字元的科學記數法(尾數/指數) |
5 |
f 十進位制浮點數 |
6 |
g 使用較短的 %e 或 %f |
7 |
G 使用較短的 %E 或 %f |
8 |
o 帶符號八進位制數 |
9 |
s 字元字串 |
10 |
u 無符號十進位制整數 |
11 |
x 無符號十六進位制整數 |
12 |
X 無符號十六進位制整數(大寫字母) |
13 |
p 指標地址 |
14 |
n 不列印任何內容 |
15 |
% 字元 |
序號 | 標誌 & 描述 |
---|---|
1 |
- 在給定的欄位寬度內左對齊;右對齊是預設值(參見寬度子說明符)。 |
2 |
+ 強制在結果前加上加號或減號(+或-),即使對於正數也是如此。預設情況下,只有負數前面帶有“-”號。 |
3 |
(空格) 如果不寫入符號,則在值前插入一個空格。 |
4 |
# 與o、x或X說明符一起使用時,對於非零值,其前面分別加上0、0x或0X。與e、E和f一起使用時,它強制寫入輸出包含小數點,即使沒有數字跟隨也是如此。預設情況下,如果沒有數字跟隨,則不寫入小數點。與g或G一起使用時,結果與e或E相同,但不會刪除尾隨零。 |
5 | 0 用零 (0) 而不是空格填充數字的左側,其中指定了填充(參見寬度子說明符)。 |
序號 | 寬度 & 描述 |
---|---|
1 |
(數字) 要列印的最小字元數。如果要列印的值短於此數字,則結果將用空格填充。即使結果更大,值也不會被截斷。 |
2 |
* 寬度不是在格式字串中指定的,而是作為在必須格式化的引數之前的附加整數值引數。 |
序號 | .精度 & 描述 |
---|---|
1 |
.數字 對於整數說明符(d、i、o、u、x、X) - 精度指定要寫入的最小位數。如果要寫入的值短於此數字,則結果將用前導零填充。即使結果更長,值也不會被截斷。精度為0表示對於值0不寫入任何字元。對於e、E和f說明符 - 這是要在小數點後列印的位數。對於g和G說明符 - 這是要列印的最大有效位數。對於s - 這是要列印的最大字元數。預設情況下,所有字元都將列印,直到遇到結束空字元為止。對於c型別 - 它無效。如果沒有指定精度,則預設為1。如果指定了句點而沒有為精度指定顯式值,則假定為0。 |
2 |
.* 精度不是在格式字串中指定的,而是作為在必須格式化的引數之前的附加整數值引數。 |
序號 | 長度 & 描述 |
---|---|
1 |
h 引數被解釋為short int或unsigned short int(僅適用於整數說明符-i、d、o、u、x和X)。 |
2 |
l 對於整數說明符(i、d、o、u、x和X),引數被解釋為long int或unsigned long int,對於說明符c和s,則解釋為寬字元或寬字元字串。 |
3 |
L 引數被解釋為long double(僅適用於浮點說明符-e、E、f、g和G)。 |
arg − 代表可變引數列表的物件。這應該由<stdarg>中定義的va_start宏初始化。
返回值
如果成功,則返回寫入的總字元數;否則,返回負數。
示例
以下示例顯示了vfprintf()函式的用法。
#include <stdio.h> #include <stdarg.h> void WriteFrmtd(FILE *stream, char *format, ...) { va_list args; va_start(args, format); vfprintf(stream, format, args); va_end(args); } int main () { FILE *fp; fp = fopen("file.txt","w"); WriteFrmtd(fp, "This is just one argument %d \n", 10); fclose(fp); return(0); }
讓我們編譯並執行上面的程式,該程式將開啟一個名為file.txt的檔案以便寫入當前目錄,並將寫入以下內容:
This is just one argument 10
現在讓我們使用以下程式檢視上面檔案的 內容:
#include <stdio.h> int main () { FILE *fp; int c; fp = fopen("file.txt","r"); while(1) { c = fgetc(fp); if( feof(fp) ) { break; } printf("%c", c); } fclose(fp); return(0); }
讓我們編譯並執行上面的程式以產生以下結果。
This is just one argument 10