// randomfile.c -- 使用fseek()函數隨機訪問文件 #include <stdio.h> #include <stdlib.h> #define MAX 50 int main(void){ FILE *fp; int data, count, array[MAX]; long offset; // 爲數組各元素賦值 for(count = 0; count < MAX; count++) array[count] = count * 10; // 以寫入模式打開二進制文件 if((fp = fopen("RANDOM.DAT", "wb")) == NULL){ fprintf(stderr, "Error opening file."); exit(1); } // 將數組寫入文件,而後關閉文件 if((fwrite(array, sizeof(int), MAX, fp)) != MAX){ fprintf(stderr, "Error writing data to file."); exit(1); } fclose(fp); // 以二進制模式打開文件 if((fp = fopen("RANDOM.DAT", "rb")) == NULL){ fprintf(stderr, "Error opening file."); exit(1); } /*詢問用戶但願讀取哪個元素。 輸入該元素並顯示它,用戶輸入-1時退出程序*/ while(1){ printf("\nEnter element to read, 0-%d, -1 to quit: ", MAX-1); scanf("%ld", &offset); if(offset < 0) break; else if(offset > MAX-1) continue; //將位置指示符移至制定元素 if((fseek(fp, (offset * sizeof(int)), SEEK_SET)) != 0){ fprintf(stderr, "Error using fseek()."); exit(1); } fread(&data, sizeof(int), 1, fp); printf("\nElement %ld has value %d.", offset, data); } fclose(fp); return 0; }