av手机免费在线观看,国产女人在线视频,国产xxxx免费,捆绑调教一二三区,97影院最新理论片,色之久久综合,国产精品日韩欧美一区二区三区

C語(yǔ)言

C語(yǔ)言EOF如何使用

時(shí)間:2025-05-01 06:13:11 C語(yǔ)言 我要投稿
  • 相關(guān)推薦

C語(yǔ)言EOF如何使用

  如果EOF是一個(gè)特殊字符,那么假定每個(gè)文本文件的結(jié)尾都有一個(gè)EOF(也就是-1),還是可以做到的,因?yàn)槲谋緦?duì)應(yīng)的ASCII碼都是正值,不可能有負(fù)值。但是,二進(jìn)制文件怎么辦呢?怎么處理文件內(nèi)部包含的-1呢?下面是小編為大家?guī)?lái)的關(guān)于C語(yǔ)言EOF如何使用的知識(shí),歡迎閱讀。

  存在問(wèn)題:

  又一次遇到有人問(wèn)EOF的用法,到底如何來(lái)使用那?

  解決方案:

  這里有一篇文章寫(xiě)的不錯(cuò),希望對(duì)EOF沒(méi)有理解的同學(xué)能有所幫助。

  我學(xué)習(xí)C語(yǔ)言的時(shí)候,遇到的一個(gè)問(wèn)題就是EOF。

  它是end of file的縮寫(xiě),表示"文字流"(stream)的結(jié)尾。這里的"文字流",可以是文件(file),也可以是標(biāo)準(zhǔn)輸入(stdin)。

  比如,下面這段代碼就表示,如果不是文件結(jié)尾,就把文件的內(nèi)容復(fù)制到屏幕上。

  int c;

  while ((c = fgetc(fp)) != EOF) {

  putchar (c);

  }

  很自然地,我就以為,每個(gè)文件的結(jié)尾處,有一個(gè)叫做EOF的特殊字符,讀取到這個(gè)字符,操作系統(tǒng)就認(rèn)為文件結(jié)束了。

  但是,后來(lái)我發(fā)現(xiàn),EOF不是特殊字符,而是一個(gè)定義在頭文件stdio.h的常量,一般等于-1。

  #define EOF (-1)

  于是,我就困惑了。

  如果EOF是一個(gè)特殊字符,那么假定每個(gè)文本文件的結(jié)尾都有一個(gè)EOF(也就是-1),還是可以做到的,因?yàn)槲谋緦?duì)應(yīng)的ASCII碼都是正值,不可能有負(fù)值。但是,二進(jìn)制文件怎么辦呢?怎么處理文件內(nèi)部包含的-1呢?

  這個(gè)問(wèn)題讓我想了很久,后來(lái)查了資料才知道,在Linux系統(tǒng)之中,EOF根本不是一個(gè)字符,而是當(dāng)系統(tǒng)讀取到文件結(jié)尾,所返回的一個(gè)信號(hào)值(也就是-1)。至于系統(tǒng)怎么知道文件的結(jié)尾,資料上說(shuō)是通過(guò)比較文件的長(zhǎng)度。

  所以,處理文件可以寫(xiě)成下面這樣:

  int c;

  while ((c = fgetc(fp)) != EOF) {

  do something

  }

  這樣寫(xiě)有一個(gè)問(wèn)題。fgetc()不僅是遇到文件結(jié)尾時(shí)返回EOF,而且當(dāng)發(fā)生錯(cuò)誤時(shí),也會(huì)返回EOF。因此,C語(yǔ)言又提供了feof()函數(shù),用來(lái)保證確實(shí)是到了文件結(jié)尾。上面的代碼feof()版本的寫(xiě)法就是:

  int c;

  while (!feof(fp)) {

  c = fgetc(fp);

  do something;

  }

  但是,這樣寫(xiě)也有問(wèn)題。fgetc()讀取文件的最后一個(gè)字符以后,C語(yǔ)言的feof()函數(shù)依然返回0,表明沒(méi)有到達(dá)文件結(jié)尾;只有當(dāng)fgetc()向后再讀取一個(gè)字符(即越過(guò)最后一個(gè)字符),feof()才會(huì)返回一個(gè)非零值,表示到達(dá)文件結(jié)尾。

  所以,按照上面這樣寫(xiě)法,如果一個(gè)文件含有n個(gè)字符,那么while循環(huán)的內(nèi)部操作會(huì)運(yùn)行n+1次。所以,最保險(xiǎn)的寫(xiě)法是像下面這樣:

  int c = fgetc(fp);

  while (c != EOF) {

  do something;

  c = fgetc(fp);

  }

  if (feof(fp)) {

  printf(" End of file reached.");

  } else {

  printf(" Something went wrong.");

  }

  除了表示文件結(jié)尾,EOF還可以表示標(biāo)準(zhǔn)輸入的結(jié)尾。

  int c;

  while ((c = get)) != EOF) {

  putc);

  }

  但是,標(biāo)準(zhǔn)輸入與文件不一樣,無(wú)法事先知道輸入的長(zhǎng)度,必須手動(dòng)輸入一個(gè)字符,表示到達(dá)EOF。

  Linux中,在新的一行的開(kāi)頭,按下Ctrl-D,就代表EOF(如果在一行的中間按下Ctrl-D,則表示輸出"標(biāo)準(zhǔn)輸入"的緩存區(qū),所以這時(shí)必須按兩次Ctrl-D);Windows中,Ctrl-Z表示EOF。(順便提一句,Linux中按下Ctrl-Z,表示將該進(jìn)程中斷,在后臺(tái)掛起,用fg命令可以重新切回到前臺(tái);按下Ctrl-C表示終止該進(jìn)程。)

  那么,如果真的想輸入Ctrl-D怎么辦?這時(shí)必須先按下Ctrl-V,然后就可以輸入Ctrl-D,系統(tǒng)就不會(huì)認(rèn)為這是EOF信號(hào)。Ctrl-V表示按"字面含義"解讀下一個(gè)輸入,要是想按"字面含義"輸入Ctrl-V,連續(xù)輸入兩次就行了。

  拓展:

  (一)如何學(xué)習(xí)c語(yǔ)言最好

  用PIC單片機(jī)開(kāi)發(fā)電子產(chǎn)品和用C語(yǔ)言編程,最主要的是要堅(jiān)持學(xué)習(xí),不能中斷。應(yīng)通過(guò)各種實(shí)例程序來(lái)學(xué)習(xí)C語(yǔ)言的語(yǔ)法規(guī)則。要熟練掌握C語(yǔ)言的數(shù)據(jù)類型表達(dá)方法、各種運(yùn)算符、各種語(yǔ)句結(jié)構(gòu)。

  最好能背誦。要學(xué)會(huì)用C函數(shù)實(shí)現(xiàn)所需功能的方法。實(shí)際上,每個(gè)C函數(shù)都相當(dāng)于一個(gè)功能模塊,一個(gè)C函數(shù)便可實(shí)現(xiàn)一種功能。

  此外,用C語(yǔ)言開(kāi)發(fā)PIC單片機(jī)應(yīng)用產(chǎn)品,必須具有PIC單片機(jī)匯編語(yǔ)言知識(shí)。如果你已經(jīng)掌握了用匯編語(yǔ)言編寫(xiě)PIC單片機(jī)源程序的方法,最好將編寫(xiě)成功的PIC單片機(jī)匯編語(yǔ)言源程序,逐個(gè)用C語(yǔ)言源文件代換,從中體會(huì)C語(yǔ)言的優(yōu)越性。

 。ǘヽ語(yǔ)言學(xué)習(xí)技巧

  1、首先準(zhǔn)備一臺(tái)PC,學(xué)編程一般對(duì)PC沒(méi)有太大的要求,一般主流的配置就好。

  2、有了電腦之后,就得考慮安裝什么操作系統(tǒng)了,主流使用的操作系統(tǒng)是windows,不過(guò)在這里不建議學(xué)習(xí)C編程使用windows,建議使用Linux。所以學(xué)習(xí)者最好安裝雙系統(tǒng),或者徹底習(xí)慣Linux系統(tǒng)。

  3、不管學(xué)習(xí)哪門編程語(yǔ)言,我都建議學(xué)習(xí)者必須有一本關(guān)于此語(yǔ)言的全面知識(shí)的書(shū)籍,大學(xué)里一般采用的是譚浩強(qiáng)老師的《C語(yǔ)言程序設(shè)計(jì)》,建議學(xué)習(xí)者可以去仔細(xì)研讀。

  4、在平時(shí)學(xué)習(xí)看書(shū)的時(shí)候,一定有學(xué)會(huì)做筆記的習(xí)慣,而且不僅要記錄,還要經(jīng)常看自己所做的筆記,這樣才會(huì)有較好的學(xué)習(xí)效率。

  5、多逛技術(shù)論壇或者技術(shù)問(wèn)答社區(qū),想別人分享自己的代碼,有要積極去閱讀別人的代碼,互相取長(zhǎng)補(bǔ)短。

  6、在C語(yǔ)言基礎(chǔ)學(xué)習(xí)得差不多之后,可以深入學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),以及自己嘗試做一些簡(jiǎn)單的項(xiàng)目,比如學(xué)生學(xué)籍管理系統(tǒng)、圖書(shū)管理系統(tǒng),銀行管理系統(tǒng)等。

【C語(yǔ)言EOF如何使用】相關(guān)文章:

C語(yǔ)言中如何使用sscanf08-27

如何使用C語(yǔ)言數(shù)組指針09-14

如何使用C語(yǔ)言求N的階乘07-11

如何使用C語(yǔ)言開(kāi)發(fā)DSP系統(tǒng)09-13

C語(yǔ)言中如何使用隨機(jī)數(shù)09-21

C語(yǔ)言for循環(huán)的使用10-24

C語(yǔ)言的使用的詳解09-17

C語(yǔ)言typedef的使用09-24

C語(yǔ)言的內(nèi)存使用09-23