内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

專(zhuān)升本C語(yǔ)言——第十章-創(chuàng)新互聯(lián)

對(duì)文件的輸入輸出 什么是文件?

文件有不同的類(lèi)型,在程序設(shè)計(jì)中,主要用到兩種文件

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),海城企業(yè)網(wǎng)站建設(shè),海城品牌網(wǎng)站建設(shè),網(wǎng)站定制,海城網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,海城網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。程序文件

包括源程序文件(后綴為.c)、目標(biāo)文件(后綴為.obj)、可執(zhí)行文件(后綴為.exe)等。這種文件的內(nèi)容是程序代碼

數(shù)據(jù)文件

常常需要將一些數(shù)據(jù)(運(yùn)行的最終結(jié)果或中間數(shù)據(jù))輸出到磁盤(pán)上保存起來(lái),以后需要時(shí)再?gòu)拇疟P(pán)中輸入到計(jì)算機(jī)內(nèi)存,這就要用到磁盤(pán)文件

文件是程序設(shè)計(jì)中的一個(gè)重要的概念,所謂”文件“一般指存儲(chǔ)在外部介質(zhì)上數(shù)據(jù)的集合

文件由運(yùn)行環(huán)境(即操作系統(tǒng))進(jìn)行統(tǒng)一管理的

C的數(shù)據(jù)文件由一連串的字符(或字節(jié))組成,而不考慮行的界限,兩行數(shù)據(jù)間不會(huì)自動(dòng)加分隔符,對(duì)文件的存取是以字符(字節(jié))為單位的。輸入輸出數(shù)據(jù)流的開(kāi)始和結(jié)束僅受程序控制而不受物理符號(hào)(如回車(chē)換行符)控制,這就增加了處理的靈活性。這種文件稱(chēng)為流式文件。

文件名

一個(gè)文件要有唯一的文件標(biāo)識(shí),以便用戶識(shí)別和引用。文件標(biāo)識(shí)包括3部分:文件路徑;文件名主干;文件后綴

D:\\CC\temp\file1.dat  //表示file1.dat文件存放在D盤(pán)中CC目錄下的temp子目錄下面

文件標(biāo)識(shí)符常被稱(chēng)為文件名,此時(shí)所稱(chēng)的文件名包括上面的3部分。

文件名主干的命名規(guī)則遵循標(biāo)識(shí)符的命名規(guī)則

后綴用來(lái)表示文件的性質(zhì),一般不超過(guò)3個(gè)字母(如:doc)

文件的分類(lèi)

數(shù)據(jù)文件可分為ASCLL文件和二進(jìn)制文件

數(shù)據(jù)在內(nèi)存中是以二進(jìn)制形式存儲(chǔ)的,如果不加轉(zhuǎn)換地輸出到外存,就是二進(jìn)制文件,可以認(rèn)為它就是存儲(chǔ)在內(nèi)存的數(shù)據(jù)的映像,所以也稱(chēng)之為映像文件。如果要求在外存上以ASCLL代碼形式存儲(chǔ),則需要在存儲(chǔ)前進(jìn)行轉(zhuǎn)換,ASCLL文件又稱(chēng)文本文件,每個(gè)字節(jié)放一個(gè)字符的ASCLL代碼

文件緩存區(qū)

所謂文件緩存系統(tǒng)是指系統(tǒng)自動(dòng)地在內(nèi)存區(qū)為程序中每一個(gè)正在使用的文件開(kāi)辟一個(gè)文化緩沖區(qū)。從內(nèi)存向磁盤(pán)輸出數(shù)據(jù)必須先送到內(nèi)存中的緩沖區(qū),裝滿緩沖區(qū)后才一起送到磁盤(pán)去。如果從磁盤(pán)向計(jì)算機(jī)讀入數(shù)據(jù),則一次從磁盤(pán)文件將一批數(shù)據(jù)輸?shù)絻?nèi)存緩沖區(qū)(充滿緩沖區(qū)),然后再?gòu)木彌_區(qū)逐個(gè)地將數(shù)據(jù)送到程序數(shù)據(jù)區(qū)(給程序變量)。

文件類(lèi)型指針

緩存文件系統(tǒng)中,關(guān)鍵的概念是“文件類(lèi)型指針”,簡(jiǎn)稱(chēng)“文件指針”。

定義FILE類(lèi)型的變量

FILE F1;//定義了一個(gè)結(jié)構(gòu)體變量f1,用它存放一個(gè)文件的有關(guān)信息

定義一個(gè)指向文件型數(shù)據(jù)的指針變量

FILE* fp;//定義fp是一個(gè)指向FILE類(lèi)型數(shù)據(jù)的指針變量,可以使fp指向一個(gè)文件信息區(qū)(是一個(gè)結(jié)構(gòu)體變量),通過(guò)該文件信息區(qū)中的信息能夠訪問(wèn)該文件

通常將這種指向文件信息區(qū)的指針變量簡(jiǎn)稱(chēng)為指向文件的指針變量

打開(kāi)和關(guān)閉文件

所謂打開(kāi)是指為文件建立相應(yīng)的信息區(qū)(用來(lái)存放有關(guān)文件的信息)和文件緩沖區(qū)(用來(lái)暫時(shí)存放輸入輸出的數(shù)據(jù))

所謂關(guān)閉是指撤銷(xiāo)文件信息區(qū)和文件緩沖區(qū),使文件指針變量不再指向該文件,顯然就無(wú)法進(jìn)行對(duì)文件的讀寫(xiě)了

用fopen函數(shù)打開(kāi)數(shù)據(jù)文件

fopen 函數(shù)的調(diào)用方式為

fopen(文件名,使用文件方式);
//例如:
fopen("al","r");//表示打開(kāi)名字為“al”的文件,使用文件方式為“讀入”
			//fopen的返回值指向al文件的指針(即al文件信息區(qū)的起始地址)通常將fopen函數(shù)的返回值賦給一個(gè)指向文件的指針變量
FILE* fp;			//定義一個(gè)指向文件的指針變量fp
fp=fopen("al","r");	//將fopen函數(shù)的返回值賦給指針變量fp
文件使用方式含義如果指定的文件不存在
“r“(只讀)為了輸入數(shù)據(jù),打開(kāi)一個(gè)已存在的文本文件出錯(cuò)
”w”(只寫(xiě))為了輸出數(shù)據(jù),打開(kāi)一個(gè)文本文件建立新文件
“a”(追寫(xiě))向文本文件添加數(shù)據(jù)出錯(cuò)
“rb”(只讀)為了輸入數(shù)據(jù),打開(kāi)一個(gè)二進(jìn)制文件出錯(cuò)
”wb”(只寫(xiě))為了輸出數(shù)據(jù),打開(kāi)一個(gè)二進(jìn)制文件建立新文件
“ab”(追加)向二進(jìn)制文件尾添加數(shù)據(jù)出錯(cuò)
“r+”(讀寫(xiě))為了讀和寫(xiě),打開(kāi)一個(gè)文本文件出錯(cuò)
“w+”(讀寫(xiě))為了讀和寫(xiě),建立一個(gè)新的文本文件建立新文件
“a+”(讀寫(xiě))為了讀和寫(xiě),打開(kāi)一個(gè)文本文件出錯(cuò)
“rb+”(讀寫(xiě))為了讀和寫(xiě),打開(kāi)一個(gè)二進(jìn)制文件出錯(cuò)
“wb+”(讀寫(xiě))為了讀和寫(xiě),建立一個(gè)新的二進(jìn)制文件建立新文件
“ab+”(讀寫(xiě))為讀寫(xiě)打開(kāi)一個(gè)二進(jìn)制文件出錯(cuò)
用fclose函數(shù)關(guān)閉數(shù)據(jù)文件

關(guān)閉就是撤銷(xiāo)文件信息區(qū)和文件緩沖區(qū),使文件指針變量不再指向該文件,也就是文件指針變量與文件“掛鉤”,此后不能再通過(guò)該指針對(duì)原來(lái)與其相聯(lián)系的文件進(jìn)行讀寫(xiě)操作,除非再次打開(kāi),使該指針變量重新指向該文件

關(guān)閉文件用fclose函數(shù)。fclose函數(shù)調(diào)用的一般形式為

fclose(文件指針);
//例如:
fclose(fp);

前面曾把打開(kāi)文件(用fopen函數(shù))時(shí)函數(shù)返回的指針賦給了fp,現(xiàn)在把fp指向的文件關(guān)閉,此后不再指向該文件

如果不關(guān)閉文件將會(huì)丟失數(shù)據(jù),因?yàn)?,在向文件?xiě)數(shù)據(jù)時(shí),是先將數(shù)據(jù)輸出到緩沖區(qū),待緩沖區(qū)充滿后才正式輸出給文件。如果當(dāng)數(shù)據(jù)未充滿緩沖區(qū)就程序結(jié)束運(yùn)行,就有可能使緩沖區(qū)中的數(shù)據(jù)丟失。要用fclose函數(shù)關(guān)閉文件,先把緩沖區(qū)中的數(shù)據(jù)輸出到磁盤(pán)文件,然后才撤銷(xiāo)文件緩沖區(qū)。有的編譯系統(tǒng)在程序結(jié)束前會(huì)自動(dòng)先將緩沖區(qū)中的數(shù)據(jù)寫(xiě)到文件。從而避免了這個(gè)問(wèn)題,但還是應(yīng)當(dāng)養(yǎng)成在程序終止之前關(guān)閉所有文件的習(xí)慣

fclose函數(shù)也帶回一個(gè)值,當(dāng)成功地執(zhí)行了關(guān)閉操作,則返回值為0;否則返回EOF(-1)

順序讀寫(xiě)數(shù)據(jù)文件 怎樣向文件讀寫(xiě)字符

讀寫(xiě)一個(gè)字符的函數(shù)

函數(shù)名調(diào)用形式功能返回值
fgetcfgetc(fp)從fp指向的文件讀入一個(gè)字符讀成功,帶回所讀的字符,失敗則返回文件結(jié)束標(biāo)志EOF(-1)
fputcfputc(ch,fp)把字符ch寫(xiě)到文件指針變量fp所指的文件中輸出成功,返回值就是輸出的字符;輸出失敗,則返回EOF(-1)

說(shuō)明:fgetc的第1個(gè)字母f代表文件(file),中間的get表示“獲取”,最后一個(gè)字母c表示字符(character),fgetc的含義很清楚:文件讀取一個(gè)字符。fputc也類(lèi)似

//從鍵盤(pán)輸入一些字符,逐個(gè)把它們送到磁盤(pán)上去,直到用戶輸入一個(gè)"#"為止
//解題思路:用fgetc函數(shù)從鍵盤(pán)逐個(gè)輸入字符,然后用fputc函數(shù)寫(xiě)到磁盤(pán)文件即可
#include#includeint main()
{FILE* fp;
	char ch, filename[10];
	printf("請(qǐng)輸入所用的文件名:");
	scanf("%s",filename);
	if ((fp = fopen(filename,"w")) == NULL)		//打開(kāi)輸出文件并使fp指向此文件
	{printf("無(wú)法打開(kāi)此文件\n");				//如果打開(kāi)時(shí)錯(cuò)誤,就輸出“打不開(kāi)”的信息
		exit(0);								//終止循環(huán)
	}
	ch = getchar();								//用來(lái)接受最后輸入的回車(chē)符
	printf("請(qǐng)輸入一個(gè)準(zhǔn)備存儲(chǔ)到磁盤(pán)的字符串(以#結(jié)束):");
	ch = getchar();								//接收從鍵盤(pán)輸入的第一個(gè)字符
	while (ch != '#')							//當(dāng)輸入'#'時(shí)結(jié)束循環(huán)
	{fputc(ch, fp);							//向鍵盤(pán)文件出一個(gè)字符
		putchar(ch);							//將輸出的字符顯示在屏幕上
		ch = getchar();							//再接受從鍵盤(pán)輸入的一個(gè)字符
	}
	fclose(fp);									//關(guān)閉文件
	putchar(10);								//向屏幕輸出一個(gè)換行符
	return 0;
}
//將一個(gè)磁盤(pán)文件中的信息賦值到另一個(gè)磁盤(pán)文件中,今要求將上列建立的file.dat文件中的內(nèi)容賦值到另一個(gè)磁盤(pán)文件file2.dat中
//解題思路:處理此問(wèn)題的算法是,從file1.dat文件中逐個(gè)讀入字符,然后逐個(gè)輸出到file2.dat中
#include#includeint main()
{FILE* in, * out; //定義指向FILE類(lèi)型文件的指針變量
	char ch, infile[10], outfile[10];//定義兩個(gè)字符數(shù)組,分別存放兩個(gè)數(shù)據(jù)文件名
	printf("輸入讀入文件的名字:");
	scanf("%s", infile);//輸入一個(gè)輸入文件的名字
	printf("輸人輸出文件的名字:");
	scanf("%s", outfile);//輸入一個(gè)輸出文件的名字
	if ((in = fopen(infile, "r")) == NULL)//打開(kāi)輸入文件
	{printf("無(wú)法打開(kāi)此文件\n");
		exit(0);
	}
	if ((out = fopen(outfile, "w")) == NULL)//打開(kāi)輸出文件
	{printf("無(wú)法打開(kāi)此文件\n");
		exit(0);
	}
	while (!feof(in))//如果未遇到輸入文件的結(jié)束標(biāo)志
	{ch = fgetc(in);//從輸入文件讀入一個(gè)字符,暫放在變量ch中
		fputc(ch, out);//從ch寫(xiě)到輸出屏幕上
		putchar(ch);//將ch顯示在屏幕上
	}
	putchar(10);//顯示完全部字符后換行
	fclose(in);//關(guān)閉輸入文件
	fclose(out);//關(guān)閉輸出文件
	return 0;
}

讀寫(xiě)一個(gè)字符串的函數(shù)

函數(shù)名調(diào)用形式功能返回值
fgetsfgets(str,n,fp)從fp指向的文件讀入一個(gè)長(zhǎng)度為(n-1)的字符串,存放到字符數(shù)組str中讀成功,返回地址str,失敗則返回NULL
fputsfputs(str,fp)把str所指向的字符串寫(xiě)到文件指針變量fp所指向的文件中輸出成功,返回0;否則返回非0值

fgets中最后一個(gè)字符s表示字符串(string)。fgets的含義是從文件讀取一個(gè)字符串

說(shuō)明:

fgets函數(shù)的函數(shù)原型為

char *fgets(char *str,int n,FILE *fp)//其作用是從文件讀入一個(gè)字符串,
//調(diào)用時(shí)可寫(xiě)成
fgets(str,n,fp);//實(shí)際上只從fp所指向的文件讀入n-1個(gè)字符,然后在最后加'\0'字符

fputs函數(shù)的函數(shù)原型為

int fputs(char *str,FILE fp);//其作用是將str所指向的字符串輸出到fp所指向的文件中
//調(diào)用時(shí)可寫(xiě)成
fputs("china",fp);//字符串末尾'\0'不輸出,第一個(gè)參數(shù)可以是字符串常量、字符數(shù)組名或字符型指針

fgets和fputs這兩個(gè)函數(shù)的功能類(lèi)似于gets和puts函數(shù),只是gets和puts以中終端為讀寫(xiě)對(duì)象,而fgets和fputs函數(shù)以指定的文件作為讀寫(xiě)對(duì)象

用格式化的方式讀寫(xiě)文件

fprintf和fscanf函數(shù)

fprintf(文件指針,格式字符串,輸出表列);
fscanf(文件指針,格式字符串,輸入表列);
//例如:
fprintf(fp,"%d,%6.2f",i,f);//它的作用是將int型變量i和float變量f的值按%d和%6.2f的格式輸出到fp指向的文件中
用二進(jìn)制方式向文件讀寫(xiě)一組數(shù)據(jù)

一般調(diào)用形式

fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
  • buffer:是一個(gè)地址。對(duì)fread來(lái)說(shuō),它是用來(lái)存放從文件讀入的數(shù)據(jù)的存儲(chǔ)區(qū)的地址。對(duì)fwrite來(lái)說(shuō),是要把此地址開(kāi)始的存儲(chǔ)區(qū)中的數(shù)據(jù)向文件輸出(以上指的是起始地址)
  • size:要讀寫(xiě)的字節(jié)數(shù)
  • count:要讀寫(xiě)多少個(gè)數(shù)據(jù)項(xiàng)(每個(gè)數(shù)據(jù)項(xiàng)長(zhǎng)度為size)
  • fp: FILE類(lèi)型指針
  • 在打開(kāi)文件時(shí)用二進(jìn)制文件,這樣就可以用fread和fwrite函數(shù)讀寫(xiě)任何類(lèi)型的信息
fread(f,4,10,fp);//f是一個(gè)float類(lèi)型數(shù)組名(代表數(shù)組首元素地址)這個(gè)函數(shù)從fp所指向的文件讀入10個(gè)4個(gè)字節(jié)的數(shù)據(jù),存儲(chǔ)到數(shù)組f中
隨機(jī)讀寫(xiě)數(shù)據(jù)文件 文件位置標(biāo)記及其定位 文件位置標(biāo)記

為了對(duì)讀寫(xiě)進(jìn)行控制,系統(tǒng)為每個(gè)文件設(shè)置了一個(gè)文件讀寫(xiě)位置標(biāo)記(簡(jiǎn)稱(chēng)文件位置標(biāo)記或文件標(biāo)記),用來(lái)指示接下來(lái)要讀寫(xiě)的下一個(gè)字符的位置

如果是順序讀文件,則每寫(xiě)完一個(gè)數(shù)據(jù)后,文件位置標(biāo)記順序向后移一個(gè)位置,然后在下一個(gè)執(zhí)行寫(xiě)操作時(shí)把數(shù)據(jù)寫(xiě)入指針?biāo)傅奈恢谩V钡桨讶繑?shù)據(jù)寫(xiě)完,此時(shí)文件位置標(biāo)記在最后一次數(shù)據(jù)之后

可以根據(jù)讀寫(xiě)的需求,人為地移動(dòng)文件位置標(biāo)記的位置。文件位置標(biāo)記可以向前移、向后移,移到文件頭或文件尾,然后對(duì)該位置進(jìn)行讀寫(xiě),顯然這不是順序讀寫(xiě)了,而是隨機(jī)讀寫(xiě)

文件位置標(biāo)記的定位

用rewind函數(shù)使文件位置標(biāo)記指向文件開(kāi)頭

rewind函數(shù)的作用是使文件位置標(biāo)記重新返回文件的開(kāi)頭,此函數(shù)沒(méi)有返回值

fseek函數(shù)改變文件位置標(biāo)記

fseek函數(shù)的調(diào)用形式為

fseek(文件類(lèi)型指針,位移量,起始點(diǎn))//起始點(diǎn)用0、1、2代替,0代表文件開(kāi)始位置,1為當(dāng)前位置,2為文件末尾位置

位移量指開(kāi)始點(diǎn)為基點(diǎn),向前移動(dòng)的字節(jié)數(shù),位移量應(yīng)是long型數(shù)據(jù)(在數(shù)字的末尾加一個(gè)字母L,就表示是long型)

//fseek函數(shù)一般用于二進(jìn)制文件
fseek(fp,100L,0);	//將文件位置標(biāo)記向前移到離文件開(kāi)頭100個(gè)字節(jié)處
fseek(fp,50L,1);	//將文件位置標(biāo)記向前移到離當(dāng)前位置50個(gè)字節(jié)處
fseek(fp,-10L,2);	//將文件位置標(biāo)記從文件末尾處向后退10個(gè)字節(jié)

用ftell函數(shù)測(cè)定文件位置標(biāo)記的當(dāng)前位置

ftell函數(shù)的作用是得到流式文件中文件位置標(biāo)記的當(dāng)前位置

由于文件中的文件位置標(biāo)記經(jīng)常移動(dòng),人們往往不容易知道其當(dāng)前位置,所以常用ftell函數(shù)得到當(dāng)前位置,用相對(duì)于文件開(kāi)頭的位移量來(lái)表示。如果調(diào)傭函數(shù)時(shí)出錯(cuò)(如不存在fp指向的文件),ftell函數(shù)返回值為-1L

i=ftell(fp);//變量i存放文件當(dāng)前位置
if(i==-1L)printf("error\n");//如果調(diào)用函數(shù)時(shí)出錯(cuò),輸出"error"

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

當(dāng)前標(biāo)題:專(zhuān)升本C語(yǔ)言——第十章-創(chuàng)新互聯(lián)
文章分享:http://www.rwnh.cn/article42/ceghhc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)、網(wǎng)站導(dǎo)航、定制開(kāi)發(fā)、Google、網(wǎng)站改版、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(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)

外貿(mào)網(wǎng)站建設(shè)
和顺县| 长治县| 攀枝花市| 怀安县| 龙游县| 岱山县| 翁牛特旗| 拜城县| SHOW| 赣州市| 黄石市| 鲁山县| 清镇市| 景东| 枣强县| 甘泉县| 八宿县| 民县| 扎鲁特旗| 台州市| 苍南县| 黄平县| 建宁县| 敦化市| 连城县| 靖边县| 福安市| 九龙城区| 朔州市| 新龙县| 吴桥县| 翁源县| 乌兰察布市| 漳州市| 余姚市| 西吉县| 潼南县| 舟曲县| 遂平县| 许昌市| 六盘水市|