printf是標準輸出資料流的輸出函數,用來向螢幕這樣的標準輸出裝置輸出,而fprintf則是向檔案輸出,
將輸出的內容輸出到硬碟上的檔案或是相當於檔案的裝置上 printf是有緩衝的輸出,fprintf沒有緩衝 fprintf()傳送輸出到一個流中的函數 原形:int fprintf(FILE *stream,const char *format[,argument,...]) 功能 <javascript:void(0)>:①向檔案指標指向的檔案輸出ASCⅡ代碼 ②向顯示器輸出錯誤資訊 <javascript:void(0)> 使用形式: ①fprintf(檔案指標,"輸出格式",輸出項系列); ②fprintf(stderr,"錯誤資訊"); 使用執行個體:fprintf(stream,"%d %c %f",i,c,f); 其中定義FILE *stream; int i; char c; float f; 傳回值:成功則返回輸出的位元組數,錯誤則返回EOF。 標頭檔:stdio.h =================================================== sprintf()格式化輸出到數組的函數 原形∶int sprintf(buf,format,arg_list) 其中char *buf; 功能∶把arg_list參量的值按format的格式輸出到buf中。例∶sprintf(buffer,"相對扇區號∶%s(其中∶柱面號為%d/磁頭號為%d/扇區號為%d)",string,cyls,head,sector); 其中char buffer[100]; char *string=" "; int cyls,head,sector; 傳回值∶實際寫入數組的字元個數。 標頭檔∶stdio.h sprintf 是個變參函數,定義如下: int sprintf(char *buffer,const char *format [, argument] ... ); 除了前兩個參數類型固定外,後面可以接任意多個參數。而它的精華,顯然就在第二個參數: 格式化字串上。 printf 和sprintf 都使用格式化字串來指定串的格式,在格式串內部使用一些以“%”開頭的 格式說明符(format specifications)來佔據一個位置,在後邊的變參列表中提供相應的變數,最終 函數就會用相應位置的變數來替代那個說明符,產生一個調用者想要的字串。 格式化數字字串 sprintf 最常見的應用之一莫過於把整數列印到字串中.... 格式化讀寫函數fscanf和fprintf fscanf函數,fprintf函數與前面使用的scanf和printf 函數的功能相似,都是格式化讀寫函數。
兩者的區別在於 fscanf 函數和fprintf函數的讀寫對象不是鍵盤和顯示器,而是磁碟檔案。這兩個函數的調用格式為:
fscanf(檔案指標,格式字串,輸入表列); fprintf(檔案指標,格式字串,輸出表列); 例如: fscanf(fp,"%d%s",&i,s); fprintf(fp,"%d%c",j,ch); 用fscanf和fprintf函數也可以完成例10.6的問題。修改後的程式如例10.7所示。[例10.7] #include<stdio.h> struct stu { char name[10]; int num; int age; char addr[15]; }boya[2],boyb[2],*pp,*qq; main() { FILE *fp; char ch; int i; pp=boya; qq=boyb; if((fp=fopen("stu_list","wb+"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } printf("\ninput data\n"); for(i=0;i<2;i++,pp++) scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr); pp=boya; for(i=0;i<2;i++,pp++) fprintf(fp,"%s %d %d %s\n",pp->name,pp->num,pp->age,pp-> addr); rewind(fp); for(i=0;i<2;i++,qq++) fscanf(fp,"%s %d %d %s\n",qq->name,&qq->num,&qq->age,qq->addr); printf("\n\nname\tnumber age addr\n"); qq=boyb; for(i=0;i<2;i++,qq++) printf("%s\t%5d %7d %s\n",qq->name,qq->num, qq->age, qq->addr); fclose(fp); }