溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C語(yǔ)言或C++怎樣從文本文件中讀取和保存數(shù)據(jù)

發(fā)布時(shí)間:2021-08-26 16:31:26 來(lái)源:億速云 閱讀:317 作者:chen 欄目:編程語(yǔ)言

這篇文章主要介紹“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程序中:

  ——文件流: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í)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

c c++
AI