用fputs()把一個字符串寫入到文件中
int fputs (char string, FILE fp) ;
功能:把字符串string寫入到文件fp中
若fp為stdout,則為向屏幕輸出。
int printf ( char const format, …… ) ;
int fprintf ( FILE fp, char const format, …… ) ;
int sprintf ( char const string, char const *format, ……) ;
//以上函數(shù)的輸出字符規(guī)則都相同,不同的是它們寫入的流不同,一個是向屏幕寫入、一個向文件流寫入、一個向字符串寫入。
printf函數(shù)允許你為欲打印的數(shù)據(jù)指定精度
。對于不同類型的數(shù)據(jù)而言,精度的含義是不一樣的。
精度與整型轉(zhuǎn)換說明符%d
一起使用時,表示要打印的數(shù)據(jù)的最少數(shù)字位數(shù)。如果將要打印的數(shù)據(jù)所包含的數(shù)字的位數(shù)小于指定的精度,同時精度值前面帶有一個0或者一個小數(shù)點,則加填充0。
精度與浮點型轉(zhuǎn)換說明符%f
一起使用時,表示將要打印的最大有效數(shù)字位數(shù)。
精度與字符串轉(zhuǎn)換說明符%s
一起使用時,表示將要從一個字符串中打印出來的最大字符個數(shù)。(可用于控制打出的字符的個數(shù))表示精度的方法是:在百分號和轉(zhuǎn)換說明符之間,插入一個表示精度的整數(shù),并在整數(shù)的前面加上一個小數(shù)點。
域?qū)捄途?/strong>可以放在一起使用,方法是:在百分號和轉(zhuǎn)換說明符之間,先寫上域?qū)?,然后加上一個小數(shù)點,后面再寫上精度。
例:
printf(“%9.3f”, 123.456789) ;
的輸出結(jié)果是123.456
還可以用變量來控制域?qū)捄途?/strong>(可用于關(guān)于精度的舍入)
在格式控制字符串中表示域?qū)捇蚓鹊奈恢蒙蠈懮弦粋€星號 * ,然后程序?qū)嬎銓崊⒘斜碇邢鄬?yīng)的整型實參值,并用其替換星號。
例:
printf(“% . f”, 7, 2, 98.736) ; 將以7為域?qū)挘?為精度,輸出右對齊的98.74
表示域?qū)挼闹悼梢允钦龜?shù),也可以是負(fù)數(shù)(將導(dǎo)致輸出結(jié)果在域?qū)拑?nèi)左對齊)
printf函數(shù)還提供了一些標(biāo)記來增加它的輸出格式控制功能,在格式控制字符串中可以使用的標(biāo)記有:
-(減號)
在域?qū)拑?nèi)左對齊顯示輸出結(jié)果 +(加號)
在正數(shù)前面顯示一個加號,在負(fù)數(shù)前面顯示一個減號 空格
在不帶加號標(biāo)記的正數(shù)前面打印一個空格 #(井號)
當(dāng)使用的是八進制轉(zhuǎn)換說明符o時,在輸出數(shù)據(jù)前面加上前綴0 ; 當(dāng)使用的是十六進制轉(zhuǎn)換說明符x或X時,在輸出數(shù)據(jù)前面加上前綴0x或0X 0(零)
在打印的數(shù)據(jù)前面加上前導(dǎo)0printf("%4$d %3$d %2$d %1$d", 1, 2, 3, 9); //將會打印9 3 2 1
printf 返回值是輸出的字符個數(shù)。
#include <stdio.h>
int main()
{
int i=43;
printf("%d\n",printf("%d",printf("%d",i)));
return 0;
}//程序會輸出4321
在進行輸入/輸出時,程序并不是馬上從輸入/輸出設(shè)備處理數(shù)據(jù),而是先把數(shù)據(jù)放到緩存中,當(dāng)緩存滿時才進行輸入/輸出操作(或是遇到刷新操作,比如遇到換行或 fflush )。
C 實現(xiàn)通常允許程序員設(shè)置流的緩存大小。
void setbuf (FILE steam, char buf) ;
參數(shù) buf 必須指向一個長度為 BUFSIZ (定義在 stdio.h 頭文件中)的緩沖區(qū)。
例:
setbuf (stdout, buf) ;
將告訴 I/O 庫寫入到 stdout 中的輸出要以 buf 作為一個輸出緩沖,并且等到 buf 滿了或程序員直接調(diào)用 fflush() 再實際寫出。
將buf參數(shù)設(shè)置為NULL,可關(guān)閉緩沖。
例:
下面的程序解釋了通過使用 setbuf() 來把標(biāo)準(zhǔn)輸入復(fù)制到標(biāo)準(zhǔn)輸出:
#include <stdio.h>
int main()
{
int c;
char buf[BUFSIZ];
setbuf(stdout, buf);
while((c = getchar()) != EOF)
putchar(c);
return 0 ;
}
這段程序隱藏著一個細(xì)微的Bug:
緩沖區(qū)最后一次刷新是在主程序完成之后,庫將控制交回到操作系統(tǒng)之前所執(zhí)行的清理的一部分。在這一時刻,緩沖區(qū)已經(jīng)被釋放了?。磎ain函數(shù)棧清空之后)
有兩種方法可以避免這一問題:
使用靜態(tài)緩沖區(qū),或者將其顯式地聲明為靜態(tài)
static char buf[BUFSIZ];
或者將整個聲明移到主函數(shù)之外。
更多建議: