您好,登錄后才能下訂單哦!
這篇文章主要介紹“C語(yǔ)言或C++怎樣從文本文件中讀取和保存數(shù)據(jù)”,在日常操作中,相信很多人在C語(yǔ)言或C++怎樣從文本文件中讀取和保存數(shù)據(jù)問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”C語(yǔ)言或C++怎樣從文本文件中讀取和保存數(shù)據(jù)”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
——文件流:C標(biāo)準(zhǔn)庫(kù)提供了FILE(之所以命名為FILE,因?yàn)閘inux將所有機(jī)制都視為文件),F(xiàn)ILE對(duì)象是一個(gè)包含了管理流所需的所有信息的結(jié)構(gòu),包括緩沖區(qū)信息、各種標(biāo)記(如文件結(jié)束標(biāo)記和錯(cuò)誤標(biāo)記)以及用于實(shí)際I/O的文件描述符等。
——輸入流,輸入流:數(shù)據(jù)從文件傳送到內(nèi)存的叫輸入流,數(shù)據(jù)從內(nèi)存?zhèn)魉偷轿募慕休斎肓??!蜷_文件:FILE對(duì)象通過(guò)調(diào)用fopen函數(shù)創(chuàng)建的。如:FILE*fp,fp=fopen("filename","r"),表示以只讀的方式建立與filename相關(guān)的文件流;filename為當(dāng)前目錄下的相對(duì)路徑名,r代表可讀(打開文件的模式)。
對(duì)一些有規(guī)范格式文件的讀取,可使用標(biāo)準(zhǔn)庫(kù)stdio.h下的fscanf函數(shù),
函數(shù)原型為:intfscanf(FILE*stream,constchar*format,[argument...])
如讀取文件data.txt(數(shù)據(jù)格式相對(duì)規(guī)范)
代碼實(shí)現(xiàn)讀?。?/p>
復(fù)制代碼
//test.c
//文件讀取
#include
intmain()
{
//1:創(chuàng)建文件流,文件指針名=fopen(文件名,使用文件方式)打開失敗則返回NULL;
FILE*fp=fopen("./data.txt","r");//以data.txt文件為例
//2:檢測(cè)文件是否打開成功;
if(!fp){
printf("打開失??!\n");
return-1;//返回異常
}
//3:
intnum;//用來(lái)儲(chǔ)存一個(gè)整型數(shù)據(jù)
charname[10],place[10];//用來(lái)儲(chǔ)存兩個(gè)字符串?dāng)?shù)據(jù)
//抽象理解:
//理解文件位置含義:其表示已打開文件當(dāng)前可讀寫字符的位置,其表示為一個(gè)到文件頭的整數(shù);
//fscanf在讀取數(shù)據(jù)時(shí)可以這樣理解:文件被打開后,它就成了一個(gè)無(wú)序字節(jié)流(水流),其會(huì)通過(guò)一個(gè)管道,流向被讀取的一端;
//了解fscanf后知道,其遇到空格字符(空格,制表符),換行符,就會(huì)停止,這里的停止我們可以理解為:
//停下來(lái)為文件中兩個(gè)不相關(guān)的數(shù)據(jù)塊做一個(gè)分隔的操作,剛好適應(yīng)了我們一般將空字符(包括換行符)作為兩個(gè)數(shù)據(jù)之間的分隔的行為;
//我們只需理解管道的兩端
//流進(jìn)管道的一端的位置,就是文件的位置,表示已被讀到的位置。
//流出管道一端,就是進(jìn)程用來(lái)讀取數(shù)據(jù)的一端,其可以對(duì)管道中已經(jīng)做區(qū)分的數(shù)據(jù)進(jìn)行讀取。
//4:讀?。?/p>
fscanf(fp,"%d%s%s",&num,name,place);//fscanf對(duì)流的格式化讀取。
//注1:fscanf(fp,"%da%s%s",&num,name,place);可以實(shí)現(xiàn)對(duì)數(shù)據(jù):1a小剛河南;的準(zhǔn)確讀取,表示兩個(gè)數(shù)據(jù)之間以a為界。
//注2:因?yàn)榱魇侵羔樀男再|(zhì),所以函數(shù)是將各數(shù)據(jù)塊的首地址交給對(duì)應(yīng)參數(shù),所以num需進(jìn)行&取地址操作,
//注3:因?yàn)閚ame,place本身已表達(dá)地址,所以不用改變;
fscanf(fp,"\n");
//\n為控制字符,此時(shí)文件的位置到了第二行的開始;
//接著進(jìn)行操作:fscanf(fp,"%d%s%s",&num,name,place);就可以繼續(xù)讀取第二行
//所以我們常常只需利用一個(gè)while語(yǔ)句就可以將整個(gè)文件讀取到一個(gè)數(shù)據(jù)結(jié)構(gòu)(進(jìn)程)中
/*
while(!feof(fp))//feof()檢測(cè)一個(gè)文件是否結(jié)束,即到達(dá)文件尾,若結(jié)束,則返回非0值,否則返回0
{
fscanf(fp,"%d%s%s\n",&num,name,place);
}
*/
//檢測(cè)讀取結(jié)果
printf("%d%s%s\n",num,name,place);
//關(guān)閉流
fclose(fp);
return0;
}
到此,關(guān)于“C語(yǔ)言或C++怎樣從文本文件中讀取和保存數(shù)據(jù)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。