成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

c語(yǔ)言中數(shù)據(jù)塊的讀寫(xiě)函數(shù) c語(yǔ)言數(shù)據(jù)讀取

讀寫(xiě)數(shù)據(jù)塊函數(shù)fread怎么用?

首先是最簡(jiǎn)單的讀寫(xiě)一個(gè)字符的函數(shù)fputc和fgetc,在這個(gè)基礎(chǔ)上又出現(xiàn)了putw和getw、fgets和fputs,此外還說(shuō)過(guò)格式化讀寫(xiě)函數(shù)fprintf和fscanf函數(shù)。

創(chuàng)新互聯(lián)專(zhuān)注于企業(yè)成都營(yíng)銷(xiāo)網(wǎng)站建設(shè)、網(wǎng)站重做改版、海城網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5場(chǎng)景定制、成都商城網(wǎng)站開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為海城等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

從原理上來(lái)說(shuō),只要fputc和fgetc函數(shù)基本就可以完成數(shù)據(jù)的讀寫(xiě)操作了,但是在實(shí)際的使用中會(huì)遇到諸多不便,因此上面那一大堆函數(shù)就冒出來(lái)了(其實(shí)也不多)。上面函數(shù)中最方便的就是格式化讀寫(xiě)函數(shù)fprintf和fscanf了,因?yàn)榭梢砸恍行械倪M(jìn)行讀取,但是有個(gè)問(wèn)題就是這兩位老人家動(dòng)作比較慢,fprintf在寫(xiě)文件的時(shí)候要把二進(jìn)制形式表示的數(shù)據(jù)轉(zhuǎn)換為ASCII碼形式,fscanf在讀文件的時(shí)候又要將ASCII碼轉(zhuǎn)換為二進(jìn)制的形式。

好不容易出來(lái)個(gè)好用的函數(shù),竟然是個(gè)慢性子,聰明的你現(xiàn)在也許就在想了:那能不能不轉(zhuǎn)換,直接讀寫(xiě)二進(jìn)制的數(shù)據(jù)呢?答案就是fread和fwrite,在需要頻繁進(jìn)行數(shù)據(jù)讀寫(xiě)的時(shí)候,使用這兩個(gè)函數(shù)將大大提升效率。

fread和fwrite函數(shù)的定義

fread(pBuffer,size,count,pFile);

fwrite(pBuffer,size,count,pFile);

要讀寫(xiě)一個(gè)數(shù)據(jù)塊的話,無(wú)論是讀還是寫(xiě),都需要指定一個(gè)起始地址,讀的話從這個(gè)起始地址讀,寫(xiě)的話從這個(gè)起始地址寫(xiě),上面函數(shù)定義中的第一個(gè)參數(shù)pBuffer就是用于指定這個(gè)起始地址,size讀寫(xiě)的字節(jié)數(shù),count則指定讀寫(xiě)多少個(gè)size大小的數(shù)據(jù),pFile是文件結(jié)構(gòu)指針。

fread和fwrite函數(shù)使用示例

說(shuō)到數(shù)據(jù)塊我們自然會(huì)想到結(jié)構(gòu)體,如果一個(gè)文件中保存的是一個(gè)個(gè)結(jié)構(gòu)體信息,那每一個(gè)結(jié)構(gòu)體信息就可以看做一個(gè)數(shù)據(jù)塊了。這里直接用前面文章中我們一直使用的學(xué)生成績(jī)信息的結(jié)構(gòu)體:

C語(yǔ)言: 知蟻博客

struct student

{

int nID; //學(xué)號(hào)

char chName[20]; //姓名

float fScores[3]; //3門(mén)課的成績(jī)

};

實(shí)例程序有點(diǎn)小復(fù)雜的,首先我們自己新建一個(gè)txt文件,也就是ASCII文件啦,然后寫(xiě)上一些數(shù)據(jù),如下:

1 zhangsan 78.0 79.0 80.0

2 lisi 79.0 77.0 78.0

3 wangwu 90.0 97.0 78.0

4 zhaokai 56.0 57.0 58.0

我們先用ASCII方式打開(kāi)這個(gè)文件,通過(guò)fscanf函數(shù)讀取里面的數(shù)據(jù),然后通過(guò)fwrite寫(xiě)入到新的二進(jìn)制格式的文件中,這樣我們就得到了一個(gè)保存上面信息的二進(jìn)制格式的文件了,下面就是通過(guò)fread函數(shù)進(jìn)行數(shù)據(jù)的讀取了。(記?。篺read和fwrite一般用于二進(jìn)制文件的輸入輸出,ASCII文件還是不要考慮了)。

C++語(yǔ)言: 知蟻博客

#include "stdio.h"

struct student

{

int nID; //學(xué)號(hào)

char chName[20]; //姓名

float fScores[3]; //3門(mén)課的成績(jī)

};

void main()

{

FILE *pRead,*pWrite;

struct student tStu[4];

struct student *ptStu = NULL;

int nCount = 0;

//ASCII方式打開(kāi)文件 用于讀入

pRead=fopen("stu_scores.txt","r");

if(NULL == pRead)

{

return;

}

//二進(jìn)制文件打開(kāi)文件 用于寫(xiě)入

pWrite=fopen("stu_scores_bin.txt","wb");

if(NULL == pWrite)

{

fclose(pRead);

return;

}

//fscanf讀取數(shù)據(jù),fwrite寫(xiě)入數(shù)據(jù)

ptStu = tStu;

while(!feof(pRead))

{

fscanf(pRead,"%d %s %f %f %f\n",ptStu-nID,ptStu-chName,ptStu-fScores[0],ptStu-fScores[1],ptStu-fScores[2]);

fwrite(ptStu,sizeof(struct student),1,pWrite);

printf("%d %s %.1f %.1f %.1f\n",ptStu-nID,ptStu-chName,ptStu-fScores[0],ptStu-fScores[1],ptStu-fScores[2]);

ptStu++;

}

fclose(pRead);

fclose(pWrite);

memset(tStu,0×00,sizeof(tStu)); //清空數(shù)據(jù)

//二進(jìn)制文件打開(kāi)文件 用于讀取

pRead=fopen("stu_scores_bin.txt","rb");

if(NULL == pRead)

{

printf("open file stu_scores_bin.txt failed");

return;

}

//下面有兩種fread的讀數(shù)據(jù)方式,將下面的1換成0,則使用第二種方式

#if 1

//一條條的讀取

ptStu = tStu;

nCount = fread(ptStu,sizeof(struct student),1,pRead);

while(nCount0)

{

printf("%d %s %.1f %.1f %.1f\n",ptStu-nID,ptStu-chName,ptStu-fScores[0],ptStu-fScores[1],ptStu-fScores[2]);

ptStu++;

nCount = fread(ptStu,sizeof(struct student),1,pRead);

}

#else

//因?yàn)槭孪戎烙?條信息,因此可以直接讀取四條信息

fread(tStu,sizeof(struct student),4,pRead);

for(nCount=0; nCount4; nCount++)

{

printf("%d %s %.1f %.1f %.1f\n",tStu[nCount].nID,tStu[nCount].chName,tStu[nCount].fScores[0],tStu[nCount].fScores[1],tStu[nCount].fScores[2]);

}

#endif

fclose(pRead);

}

上面用fread讀取的時(shí)候,我們既可以一條條的讀取,也可以一次讀入多條,這就是為什么參數(shù)中有size和count的原因

C語(yǔ)言數(shù)據(jù)塊讀寫(xiě)

fopen函數(shù)完全可以,但為了確保文件是被打開(kāi),加了if判斷,這是程序設(shè)計(jì)問(wèn)題,而且這個(gè)函數(shù)有返回值

c語(yǔ)言讀取txt文件里面的數(shù)據(jù)

在C語(yǔ)言中,文件操作都是由庫(kù)函數(shù)來(lái)完成的。

要讀取一個(gè)txt文件,首先要使用文件打開(kāi)函數(shù)fopen()。

fopen函數(shù)用來(lái)打開(kāi)一個(gè)文件,其調(diào)用的一般形式為: 文件指針名=fopen(文件名,使用文件方式) 其中,“文件指針名”必須是被說(shuō)明為FILE 類(lèi)型的指針變量,“文件名”是被打開(kāi)文件的文件名。 “使用文件方式”是指文件的類(lèi)型和操作要求?!拔募笔亲址A炕蜃址?dāng)?shù)組。

其次,使用文件讀寫(xiě)函數(shù)讀取文件。

在C語(yǔ)言中提供了多種文件讀寫(xiě)的函數(shù):

·字符讀寫(xiě)函數(shù) :fgetc和fputc

·字符串讀寫(xiě)函數(shù):fgets和fputs

·數(shù)據(jù)塊讀寫(xiě)函數(shù):freed和fwrite

·格式化讀寫(xiě)函數(shù):fscanf和fprinf

最后,在文件讀取結(jié)束要使用文件關(guān)閉函數(shù)fclose()關(guān)閉文件。

下面以格式化讀寫(xiě)函數(shù)fscanf和fprintf為例,實(shí)現(xiàn)對(duì)文件A.txt(各項(xiàng)信息以空格分割)的讀取,并將它的信息以新的格式(用制表符分割各項(xiàng)信息)寫(xiě)入B.txt,實(shí)現(xiàn)對(duì)A.txt的處理。

C語(yǔ)言源程序如下所示:

#include stdio.h

#include stdlib.h

#include assert.h

typedef struct student{

char name[32];

int no;

char sex[16];

float score;

} stu;

int main(int argc, char* argv[])

{

//打開(kāi)文件

FILE * r=fopen("A.txt","r");

assert(r!=NULL);

FILE * w=fopen("B.txt","w");

assert(w!=NULL);

//讀寫(xiě)文件

stu a[128];

int i=0;

while(fscanf(r,"%s%d%s%f",a[i].name,a[i].no,a[i].sex,a[i].score)!=EOF)

{

printf("%s\t%d\t%s\t%g\n",a[i].name,a[i].no,a[i].sex,a[i].score);//輸出到顯示器屏幕

fprintf(w,"%s\t%d\t%s\t%g\n",a[i].name,a[i].no,a[i].sex,a[i].score);//輸出到文件B.txt

i++;

}

//關(guān)閉文件

fclose(r);

fclose(w);

system("pause");

return 0;

}

網(wǎng)頁(yè)標(biāo)題:c語(yǔ)言中數(shù)據(jù)塊的讀寫(xiě)函數(shù) c語(yǔ)言數(shù)據(jù)讀取
地址分享:http://jinyejixie.com/article28/hpdjjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、網(wǎng)站制作微信小程序、定制開(kāi)發(fā)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司