30 假設一個文字檔案共有 3600 個字元,且檔案指標 fptr 指在該檔的第 400 個字元的位置。下列何種 C 語言的程式片段執行後,feof(fptr)的值為 0?
(A) fread(buffer, 1, 3600, fptr);
(B) fseek(fptr, 3200, SEEK_CUR); fgetc(fptr);
(C) fseek(fptr, 3200, SEEK_SET); fgetc(fptr);
(D) while(!feof(fptr)); getc(fptr);

答案:登入後查看
統計: A(27), B(69), C(115), D(54), E(0) #3312383

詳解 (共 1 筆)

#6219536
1.feof(fptr)若回傳值為0,代表其後面還有值(無值則回傳非0整數)。此外從檔案讀進來的文字後面會被加上EOF,用以辨別是否讀取完畢,由上述可得知fptr需落在EOF之前
2. 函數int fseek(FILE *stream, long int offset, int whence),*stream表示指標起始位置,offset代表偏移量,而whence代表添加offset的位置(此段可參考https://www.runoob.com/cprogramming/c-function-fseek.html)->SEEK_SET從開頭開始讀,沒超過原先檔案內字串的範圍
3.fgetc(fp)會抓下一個字元,並將位置標誌往後一個。選項(C)即符合題目需求,而選項(B)因添加offset的位置是從fp開始,故剛好會卡在檔案內的最後一個字(第3600個字元),後面再加上fgetc(fptr)的話,fptr就會落在EOF的位置,因而跟第一點要求相衝。
2
0