程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 深刻解讀C說話中的符號常量EOF

深刻解讀C說話中的符號常量EOF

編輯:關於C++

深刻解讀C說話中的符號常量EOF。本站提示廣大學習愛好者:(深刻解讀C說話中的符號常量EOF)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻解讀C說話中的符號常量EOF正文


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 等尺度符號常量可以或許增長法式可移植性的緣由地點。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved