欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

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

對文件的輸入輸出 什么是文件?

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

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

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

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

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

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

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

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

文件名

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

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

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

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

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

文件的分類

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

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

文件緩存區(qū)

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

文件類型指針

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

定義FILE類型的變量

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

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

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

通常將這種指向文件信息區(qū)的指針變量簡稱為指向文件的指針變量

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

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

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

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

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

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

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

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

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

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

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

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

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

讀寫一個字符的函數(shù)

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

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

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

讀寫一個字符串的函數(shù)

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

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

說明:

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

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

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

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

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

用格式化的方式讀寫文件

fprintf和fscanf函數(shù)

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

一般調(diào)用形式

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

廣告

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

外貿(mào)網(wǎng)站建設(shè)