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
stdio_h.htm
廣告