关于文件关闭的必要性
程序代码:
// 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("C:\\Users\\david\\Desktop\\RANDOM.DAT", "wb") ) == NULL) { fprintf(stderr, "\nError opening file."); exit(1); } // 将数组写入文件, 然后关闭文件 if ( (fwrite(array, sizeof(int), MAX, fp)) != MAX) { fprintf(stderr, "\nError writing data to file."); exit(1); } //此处为什么一定要关闭文件?我用flush(fp)代替不行吗?######################################################################################### fclose(fp); // 以只读模式打开文件 if ( ( fp = fopen("C:\\Users\\david\\Desktop\\RANDOM.DAT", "rb") ) == NULL) { fprintf(stderr, "\nError 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, "\nError using fseek()."); exit(1); } // 读入单个整数 fread(&data, sizeof(int), 1, fp); printf("\nElement %ld has value %d.", offset, data); } fclose(fp); return(0); }
请看程序清单中的无数个###标记处