複製鏈接
請複製以下鏈接發送給好友

fprintf

鎖定
fprintf是C/C++中的一個格式化庫函數,位於頭文件;中,其作用是格式化輸出到一個流文件中;函數原型為int fprintf( FILE *stream, const char *format, [ argument ]...),fprintf()函數根據指定的格式(format),向輸出流(stream)寫入數據(argument)。 [1-2] 
中文名
fprintf
外文名
fprintf
功 能
傳送格式化輸出到一個文件中
返回值
輸出字符數
應    用
C語言編程
頭文件
<cstdio>

fprintffprintf語法形式

fprintf函數聲明

int fprintf (FILE* stream, const char*format, [argument])

fprintf參數

  • stream-- 這是指向 FILE 對象的指針,該 FILE 對象標識了流。
  • format-- 這是 C 字符串,包含了要被寫入到流 stream 中的文本。它可以包含嵌入的 format 標籤,format 標籤可被隨後的附加參數中指定的值替換,並按需求進行格式化。format 標籤屬性是%[flags][width][.precision][length]specifier
  • [argument]:附加參數列表 [3] 

fprintf功能

fprintf()函數根據指定的格式(format),向輸出流(stream)寫入數據(argument)。

fprintf函數説明

fprintf( )會根據參數format 字符串來轉換並格式化數據,然後將結果輸出到參數stream 指定的文件中,直到出現字符串結束('\0')為止。 [4] 

fprintf用法詳解

C 庫函數int fprintf(FILE *stream, char *format[, argument,...]);
format 標籤屬性是:%[flags][width][.precision][length]specifier
具體講解如下: [4]  [3] 

fprintfspecifier説明符

specifier(説明符)
輸出
c
字符
d 或 i
有符號十進制整數
e
使用 e 字符的科學科學記數法(尾數和指數)
E
使用 E 字符的科學科學記數法(尾數和指數)
f
十進制浮點數
g
自動選擇 %e 或 %f 中合適的表示法
G
自動選擇 %E 或 %f 中合適的表示法
o
有符號八進制
s
字符的字符串
u
無符號十進制整數
x
無符號十六進制整數
X
無符號十六進制整數(大寫字母)
p
指針地址
n
無輸出
%
字符

fprintfflags標識

flags(標識)
描述
-
在給定的字段寬度內左對齊,默認是右對齊(參見 width 子説明符)。
+
強制在結果之前顯示加號或減號(+ 或 -),即正數前面會顯示 + 號。默認情況下,只有負數前面會顯示一個 - 號。
(space)
如果沒有寫入任何符號,則在該值前面插入一個空格。
#
與 o、x 或 X 説明符一起使用時,非零值前面會分別顯示 0、0x 或 0X。
與 e、E 和 f 一起使用時,會強制輸出包含一個小數點,即使後邊沒有數字時也會顯示小數點。默認情況下,如果後邊沒有數字時候,不會顯示顯示小數點。
與 g 或 G 一起使用時,結果與使用 e 或 E 時相同,但是尾部的零不會被移除。
0
在指定填充 padding 的數字左邊放置零(0),而不是空格(參見 width 子説明符)。

fprintfwidth寬度

width(寬度)
描述
(number)
要輸出的字符的最小數目。如果輸出的值短於該數,結果會用空格填充。如果輸出的值長於該數,結果不會被截斷。
*
寬度在 format 字符串中未指定,但是會作為附加整數值參數放置於要被格式化的參數之前。

fprintf.precision精度

.precision(精度)
描述
.number
對於整數説明符(d、i、o、u、x、X):precision 指定了要寫入的數字的最小位數。如果寫入的值短於該數,結果會用前導零來填充。如果寫入的值長於該數,結果不會被截斷。精度為 0 意味着不寫入任何字符。
對於 e、E 和 f 説明符:要在小數點後輸出的小數位數。
對於 g 和 G 説明符:要輸出的最大有效位數。
對於 s: 要輸出的最大字符數。默認情況下,所有字符都會被輸出,直到遇到末尾的空字符。
對於 c 類型:沒有任何影響。
當未指定任何精度時,默認為 1。如果指定時不帶有一個顯式值,則假定為 0。
.*
精度在 format 字符串中未指定,但是會作為附加整數值參數放置於要被格式化的參數之前。

fprintflength長度

length(長度)
描述
h
參數被解釋為短整型或無符號短整型(僅適用於整數説明符:i、d、o、u、x 和 X)。
l
參數被解釋為長整型或無符號長整型,適用於整數説明符(i、d、o、u、x 和 X)及説明符 c(表示一個寬字符)和 s(表示寬字符字符串)。
L
參數被解釋為長雙精度型(僅適用於浮點數説明符:e、E、f、g 和 G)。

fprintf附加參數

根據不同的 format 字符串,函數可能需要一系列的附加參數,每個參數包含了一個要被插入的值,替換了 format 參數中指定的每個 % 標籤。參數的個數應與 % 標籤的個數相同。

fprintf程序示例VC

函數範例
//...
#include <cstdio>
int main(void) {
    FILE *FSPOINTER;
    char STRBUFF[16] = "Hello World.";
    //...
    FSPOINTER = fopen("HELLO.TXT", "w+");
    //...
    fprintf(FSPOINTER, "%s", STRBUFF);
    //...
    return 0;
}
輸出至文件HELLO.TXT:
Hello World
示例一
#include <cstdio>
int main(void)
{
    FILE *in,*out;
    in = fopen("\\AUTOEXEC.BAT", "rt");
    if(in == NULL)
    {
        fprintf(in, "Can not open inputfile.\n");
        return 1;
    }
    out = fopen("\\AUTOEXEC.BAT", "wt");
    if(out == NULL)
    {
        fprintf(out, "Can not open outputfile.\n");
        return 1;
    }
    while(!feof(in))
        fputc(fgetc(in), out);
    fclose(in);
    fclose(out);
    return 0;
}

示例二
#include <cstdio>
#include <cstdlib>
#include <cprocess>
FILE* stream;
int main(void)
{
    int i = 10;
    double fp = 1.5;
    char s[] = "this is a string";
    char c = '\n';
    stream = fopen("fprintf.out", "w");
    fprintf(stream, "%s%c", s, c);
    fprintf(stream, "%d\n", i);
    fprintf(stream, "%f\n", fp);
    fclose(stream);
    system("typefprintf.out");
    return 0;
}
輸出至文件fprintf.out:
this is a string
10
1.500000

示例三
#include <cstdio>
int main()
{
    FILE* fp;
    int i = 617;
    char* s = "that is a good new";
    fp = fopen("text.dat", "w");
    fputs("total", fp);
    fputs(":", fp);
    fprintf(fp, "%d\n", i);
    fprintf(fp, "%s", s);
    fclose(fp);
    return 0;
}

輸出至文件text.dat:
 
total:617
that is a good new
參考資料
  • 1.    張權 . Objective-C函數速查實例手冊 :人民郵電出版社,2014.2
  • 2.    譚浩強.C程序設計(第4版):清華大學出版社,2010.6
  • 3.    尹德淳.C函數速查手冊 : 人民郵電出版社 ,2009.4
  • 4.    陳超.C語言常用函數速查手冊:化學工業出版社,2010.6