1、第十章【課後評量】一、問答題1.何謂 ferror()函數?試說明其用法。解答:當對資料流操作產生錯誤時,可透過此函數檢查,當回傳值不等於 0 時,表示對資料流操作產生錯誤。反之當等於 0 時,表示未發生錯誤。此函數可搭配迴圈式的輸出入動作,在迴圈執行過程中判斷是否資料流有發生錯誤,再做特別處理。2.C 對文字檔的處理方式與存取函數有那哪些?解答:C 對文字檔的處理方式主要是透過標準 I/O 函數來進行檔案的開啟、寫入、關閉與設定緩衝區,相關存取函數有 fopen()、fclose()、fgets()、fputs()、fprintf()、fscanf()等,都定義在 stdio.h 標頭檔案中
2、。3.試簡述緩衝區(buffer)的功用。解答:所謂緩衝區(buffer),就是在程式執行時,所提供的額外記憶體,可用來暫時存放準備執行的資料。緩衝區的設置是為了存取效率上的考量,因為記憶體的存取速度會比磁碟機來得快速。4.C 語言的檔案輸出入函數與基本輸出入函數有何差異性?解答:差異性為檔案輸出入函數需要指定目標檔案作輸出入,而基本輸出入則是呈現在螢幕上。5.當您不用透過資料流與緩衝區,而使用較低階的 I/O 函數(包含在 io.h 與 fcntl.h標頭檔)來直接對磁碟進行存取時,有何優缺點?解答:好處是可以節省設定緩衝區的記憶空間,但缺點是磁碟的存取速度較慢,容易拖累程式整體執行速度,另
3、外這些函數也不是 C 的標準函數,跨平台時容易發生問題。6.試敘述文字檔與二進位檔案。解答:文字檔案會以字元編碼的方式進行儲存,在 Windows 作業系統中副檔名為txt 的檔案,就是屬於文字檔案,至於採用哪一種編碼方式,則視文字檔案編輯軟體而有所不同。所謂二進位檔案,就是將記憶體中的資料原封不動的儲存至檔案之中,適用於非字元為主的資料。其實除了字元為主的文字檔案之外,所有的資料都可以說是二進位檔案,例如編譯過後的程式檔案、圖片或影片檔案等。7.請說明 fseek()函數中,檔案位置游標的起始點模式的意義。(1)SEEK_SET (2)SEEK_CUR (3)SEEK_END 解答:mode
4、 說明SEEK_SET 游標起始點位於檔案的起始位置。SEEK_CUR 游標起始點為目前檔案游標位置。SEEK_END 游標起始點位於檔案的結尾。8.請各位試說明該利用哪種檔案函數來計算出此檔案的容量。解答:由於 fgetc()函數一次可以讀取一個字元,也就是一個位元組的大小,所以我們可以使用它來計算檔案的容量,只要每讀出一個位元組計數一次即可。9.試說明.rewind() 函數與 ftell()函數的功用。解答:rewind() 這個函數,它可以將檔案讀取游標返回檔案的開頭。ftell()函數則可以取得檔案指標的位置。10.試說明以下程式碼的意義?if( (fpt1 = open(“test
5、4.txt“, O_RDONLY | O_TEXT) = -1)解答:開啟一個已存在唯讀的文字檔案 test4.txt,並檢查檔案開啟是否成功。11.下面這個程式碼哪邊出了問題?導致程式無法編譯成功?01 #include 02 03 int main(void)04 05 int fptr;06 fptr = fopen(“test.txt“, “w“);07 fputs(“Justin“, fptr);08 fclose(fptr);09 return 0;10 解答:第 05 行檔案指標宣告錯誤,應修改如下:FILE *fptr二、程式上機測驗1.請設計一 C 程式,可以讓使用者指定檔案
6、名稱,並利用 fputc()函數將使用者鍵盤所輸入內容寫入檔案中,直到按下 Enter 鍵為止。解答:ex10_01.c2.請設計一 C 程式,使用 fputc()函數與 fgetc()函數,把一個已知文字檔案拷貝到另一個檔案,並從拷貝完成的檔案中再逐字讀出內容,並以每 30 個字元為一行來輸出。此檔案名稱為“text.txt“解答:ex10_02.c3.請設計一 C 程式,將 3 筆學生的成績資料結構以 fprintf()函數的格式化模式寫入,並利用 fscanf()函數將此 3 筆資料讀出並輸出到螢幕上。該學生結構陣列資料如下:s13=“張小華 “,77,89,66,“吳大為“,54,90
7、,76,“ 林浩成“,88,90,65;解答:ex10_03.c4.請設計一 C 程式,將一個 5 個元素的整數陣列,以 fwrite()函數與二進位方式寫入檔案二進位檔.bin中。此陣列宣告如下:int data5= 1178,1623,8845,6116,92319 ;解答:ex10_04.c5.請設計一 C 程式,可讓由使用者逐字輸入字元,並存入字元陣列中,當輸入Enter 鍵時則利用 frwite()函數整個字串寫入檔案,接下來再將一個 8 個元素的整數陣列也依續寫入檔案,最後再利用 fread()函數來讀出。解答:ex10_05.c6.請設計一 C 程式來逐字讀取 word.txt 的檔案內容,並將所有英文字元以大寫及每行 20 個字元輸出。解答:ex10_06.c