亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

深入解讀C語言中的符號常量EOF

2020-01-26 14:48:58
字體:
來源:轉載
供稿:網友

EOF是指文件的結束符,是一個宏定義
    借助于getchar 與putchar 函數,可以在不了解其它輸入/輸出知識的情況下編寫出
數量驚人的有用的代碼。最簡單的例子就是把輸入一次一個字符地復制到輸出,其基本思想
如下:

  • 讀一個字符
  • while (該字符不是文件結束指示符)
  • 輸出剛讀入的字符
  • 讀下一個字符

將上述基本思想轉換為C語言程序為:

#include <stdio.h>/* copy input to output; 1st version */main(){int c;c = getchar();while (c != EOF) {putchar(c);c = getchar();}}

      其中,關系運算符!=表示“不等于”。
      字符在鍵盤、屏幕或其它的任何地方無論以什么形式表現,它在機器內部都是以位模式
存儲的。char 類型專門用于存儲這種字符型數據,當然任何整型(int)也可以用于存儲字
符型數據。因為某些潛在的重要原因,我們在此使用int類型。
      這里需要解決如何區分文件中有效數據與輸入結束符的問題。C語言采取的解決方法是:
在沒有輸入時,getchar 函數將返回一個特殊值,這個特殊值與任何實際字符都不同。這個
值稱為EOF(end of file,文件結束)。我們在聲明變量c 的時候,必須讓它大到足以存
放getchar函數返回的任何值。這里之所以不把c聲明成char類型,是因為它必須足夠大,
除了能存儲任何可能的字符外還要能存儲文件結束符EOF。因此,我們將c聲明成int類型。
EOF 定義在頭文件<stdio.h>中,是個整型數,其具體數值是什么并不重要,只要它與
任何char類型的值都不相同即可。這里使用符號常量,可以確保程序不需要依賴于其對應的
任何特定的數值。
       對于經驗比較豐富的C 語言程序員,可以把這個字符復制程序編寫得更精煉一些。在C
語言中,類似于

c = getchar()

之類的賦值操作是一個表達式,并且具有一個值,即賦值后左邊變量保存的值。也就是說,
賦值可以作為更大的表達式的一部分出現。如果將為c賦值的操作放在while循環語句的測
試部分中,上述字符復制程序便可以改寫成下列形式:

#include <stdio.h>/* copy input to output; 2nd version */main(){int c;while ((c = getchar()) != EOF)putchar(c);}

      在該程序中,while 循環語句首先讀一個字符并將其賦值給c,然后測試該字符是否為文件
結束標志。如果該字符不是文件結束標志,則執行while語句體,并打印該字符。隨后重復
執行while語句。當到達輸入的結尾位置時,while循環語句終止執行,從而整個main函
數執行結束。
      以上這段程序將輸入集中化,getchar函數在程序中只出現了一次,這樣就縮短了程序,
整個程序看起來更緊湊。習慣這種風格后,讀者就會發現按照這種方式編寫的程序更易閱讀。
我們經常會看到這種風格。(不過,如果我們過多地使用這種類型的復雜語句,編寫的程序可
能會很難理解,應盡量避免這種情況。)
對while語句的條件部分來說,賦值表達式兩邊的圓括號不能省略。不等于運算符!=的
優先級比賦值運算符=的優先級要高,這樣,在不使用圓括號的情況下關系測試!=將在賦值=
操作之前執行。因此語句

c = getchar() != EOF

等價于語句

c = (getchar() != EOF)

驗證與打印EOF

1. 驗證表達式 getchar() != EOF 的值是 0 還是 1。

#include <stdio.h>main(){ int c;    while(c = (getchar() != EOF))   printf("%d/n", c);  printf("%d - at EOF/n", c);}

程序會讀取字符,當有字符可讀時,getchar() 不會返回文件結束符(EOF),所以 getchar() != EOF 的取值為真,變量 c 將被賦值為 1。當程序遇到文件結束符時,表達式取值為假,此時變量將被賦值為 0,程序將運行結束。

對于一個判斷表達式,它的返回值會是一個布爾值。

2. 請編寫一個打印 EOF 值的程序

#include <stdio.h>main(){ printf("EOF is %d/n", EOF);}

符號常量 EOF 是在頭文件 stdio.h 中定義的,在這個程序中,printf() 語句中雙引號外的 EOF 將被替換為頭文件 stdio.h 中緊跟在 #define EOF 之后的文本。

在我們的系統中, EOF 被定義為 -1,但在其它系統中,EOF 可能被定義成其它的值。這正是使用 EOF 等標準符號常量能夠增加程序可移植性的原因所在。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
麻豆国产va免费精品高清在线| 久久久久久久久久久久久久久久久久av| 日本a级片电影一区二区| 成人欧美一区二区三区在线| 亚洲国产精品va在看黑人| 国产成人aa精品一区在线播放| 国产精品久久久久久久久久久新郎| 国产亚洲精品高潮| 怡红院精品视频| 日韩女优在线播放| 91久久久久久国产精品| 亚洲视频视频在线| 一区三区二区视频| 26uuu另类亚洲欧美日本老年| 国产精品高潮呻吟久久av黑人| 亚洲视频网站在线观看| …久久精品99久久香蕉国产| 国产自摸综合网| 亚洲欧美综合另类中字| 91在线播放国产| 成人深夜直播免费观看| 久久人人爽人人爽人人片av高清| 亚洲福利视频网站| 日韩欧美国产免费播放| 欧美在线视频网站| 国产精品久久久久影院日本| 亚洲乱码av中文一区二区| 国产欧洲精品视频| 欧美日韩黄色大片| 97人人模人人爽人人喊中文字| 97精品国产97久久久久久免费| 亚洲精品资源在线| 日韩黄在线观看| 亚洲一区二区三区乱码aⅴ| 国产精品国产三级国产aⅴ浪潮| 日韩av在线资源| 国产精品专区h在线观看| 欧美高清不卡在线| 亚洲成人网在线| 欧美高清视频在线播放| 国产免费一区二区三区在线能观看| 亚洲欧美一区二区三区情侣bbw| 久久最新资源网| 国产精品午夜国产小视频| 欧美电影院免费观看| 久久精品亚洲热| 亚洲一级黄色av| 日韩久久精品成人| 成人国产精品久久久| 久久精品电影网| 国产精品网站视频| 欧美夜福利tv在线| 日韩电影免费观看在线| 欧美大片va欧美在线播放| 亚洲欧美日韩国产中文专区| 久久精品91久久香蕉加勒比| 欧美成人国产va精品日本一级| 欧美风情在线观看| 欧美精品videossex88| 欧美老女人性生活| 一本一道久久a久久精品逆3p| 亚洲色图13p| 中文字幕日韩av综合精品| 最新亚洲国产精品| 欧美乱妇高清无乱码| 欧美精品日韩三级| 日韩二区三区在线| 激情成人中文字幕| 欧美性猛交xxxx黑人| 亚洲a区在线视频| 伊人久久综合97精品| 中文字幕不卡在线视频极品| 久久精品视频在线播放| 亚洲国产欧美精品| 久久国产精品电影| 一区二区欧美久久| 国产精品你懂得| 中文字幕在线亚洲| 欧美区二区三区| 欧美午夜精品久久久久久久| 丁香五六月婷婷久久激情| 精品一区二区三区四区| 日韩精品免费看| 欧美性xxxxxx| 欧美日韩国产影院| 69av在线视频| 26uuu日韩精品一区二区| 国产精品麻豆va在线播放| 国产精品福利片| 久久不射电影网| 国产精品入口免费视| 亚洲影视九九影院在线观看| 日本一区二区不卡| 91夜夜未满十八勿入爽爽影院| 久久成年人视频| 亚洲激情视频网站| 精品久久久久久久久国产字幕| 亚洲欧洲国产一区| 欧美性猛交xxxx乱大交极品| 91免费福利视频| 国产精品视频自在线| 欧美亚洲国产成人精品| 国产一区二区三区在线观看网站| 国产91精品久久久久| 欧美日韩美女在线| 亚洲精品98久久久久久中文字幕| 国产日韩欧美视频在线| 欧美激情综合色| 久久精品国产清自在天天线| 日韩欧美中文免费| 欧美国产日本高清在线| 欧美床上激情在线观看| 国产精品成人观看视频国产奇米| 亚洲大尺度美女在线| 国产啪精品视频| 亚洲精品免费在线视频| 亚洲欧美日本精品| 久久99久久99精品免观看粉嫩| 欧美性高潮在线| 久久免费精品日本久久中文字幕| 2019中文在线观看| 91免费人成网站在线观看18| 97久久久久久| 精品国产一区二区三区久久久狼| 欧美成年人在线观看| 国产精品91久久| …久久精品99久久香蕉国产| 一区二区欧美亚洲| 狠狠爱在线视频一区| 亚洲国产精品资源| 国产精品久久久久久婷婷天堂| 69久久夜色精品国产69乱青草| 欧美精品videofree1080p| 欧美视频免费在线观看| 91色p视频在线| 亚洲人成电影网站色xx| 91精品国产高清自在线| 欧美重口另类videos人妖| 亚洲a级在线播放观看| 国产91色在线播放| 色噜噜狠狠狠综合曰曰曰| 日韩中文字幕在线视频| 久久久精品视频成人| 日韩视频免费大全中文字幕| 欧美大片在线看| 日韩在线观看高清| 夜夜狂射影院欧美极品| 欧美电影免费观看电视剧大全| 91国偷自产一区二区三区的观看方式| 欧美激情影音先锋| 久久久噜噜噜久久久| 91欧美精品午夜性色福利在线| 成人97在线观看视频| 久久久久久久久久久久久久久久久久av| 中文字幕在线日韩| 久久久久久美女| 久久91亚洲精品中文字幕奶水| 亚洲男人的天堂在线| 亚洲一区亚洲二区亚洲三区| 97视频人免费观看| 欧美另类69精品久久久久9999| 欧美激情一区二区三区久久久| 亚洲国产精品免费| 国产v综合v亚洲欧美久久|