存了挺久沒發出來系列
字串讀寫函數fgets和fputs:
1、fgets()函數:
原型char *fgets(char *s, int n, FILE *stream);
從流中讀取n-1(n預設1024)個字元之前,如遇到了分行符號或EOF,則讀出結束。參數s是來接收字串,如果成功則返回s的指標,否則返回NULL。
在Linux C下也可以從螢幕輸入字串,例:fputs(fgets(s,n,stdin),stdout);
2、fputs()函數:
原型int fputs(char *string, FILE *stream);
送一個字串到一個流中。
fopen()開啟檔案,fclose()關閉檔案。
資料區塊讀寫函數fread和fwrite:
C語言還提供了用於整塊資料的讀寫函數。 可用來讀寫一組資料,如一個數組元素,一個結構變數的值等。讀資料區塊函數調用的一般形式為: fread(buffer,size,count,fp); 寫資料區塊函數調用的一般形式為: fwrite(buffer,size,count,fp); 其中buffer是一個指標,在fread函數中,它表示存放輸入資料的首地址。在fwrite函數中,它表示存放輸出資料的首地址。 size 表示資料區塊的位元組數。count 表示要讀寫的資料區塊塊數。fp 表示檔案指標。
例如:
fread(fa,4,5,fp); 其意義是從fp所指的檔案中,每次讀4個位元組(一個實數)送入實數組fa中,連續讀5次,即讀5個實數到fa中。
[例10.6]從鍵盤輸入兩個學生資料,寫入一個檔案中, 再讀出這兩個學生的資料顯示在螢幕上。
#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;fwrite(pp,sizeof(struct stu),2,fp);rewind(fp);fread(qq,sizeof(struct stu),2,fp);printf("\n\nname\tnumber age addr\n");for(i=0;i<2;i++,qq++)printf("%s\t%5d%7d%s\n",qq->name,qq->num,qq->age,qq->addr);fclose(fp);}
本常式序定義了一個結構stu,說明了兩個結構數組boya和 boyb以及兩個結構指標變數pp和qq。pp指向boya,qq指向boyb。程式第16行以讀寫方式開啟二進位檔案“stu_list”,輸入二個學 生資料之後,寫入該檔案中, 然後把檔案內部位置指標移到檔案首,讀出兩塊學生資料後,在螢幕上顯示。