1.我们并不是实时操纵文件,也不是实时生效,它依赖于缓冲区。非缓冲模式编程与常规区别,就是实时与不实时的区别。
2.//fgetc fputc, fgets fputs, fgetwc fputwc, fgetws fputws, fread fwrite这些函数都是缓冲区编程,当对数据要求非常高的时候,不能用这种模式,比如银行程序,存取钱不实时操作能行吗?
3.EOF有两种含义:结束和异常
//缓冲区生效:fclose,fflush缓冲区 //EOF有两种含义:结束, 异常 #include <stdio.h> void main() { FILE *pf = fopen("path", "w+"); //w模式不可写, fputs("hello world!", pf); //没有生效,刷新清空缓冲区,或者手动关闭文件,才生效。 fflush(pf); rewind(pf); int ch = fgetc(pf); if (ch == EOF) { if (feof(pf)) { printf("end"); clearerr(pf); //重置文件流状态,可以取消异常。意义不大,就是让指针退回了一步,打了一个空格。 } if (ferror(pf)) { printf("ferror"); clearerr(pf);//重置文件流,文件指针不再前进。 } }
- scanf("%d%d",&a,&b)!=EOF; scanf返回的是读入数据的数目。
- 如果a&&b都没有读入,那么上面表达式的结果为0(若a没有读入,则直接放弃b的读入);
- 如果遇到错误或者文件结尾,那么上面表达式的结果为EOF,对应的有符号数时-1;
- 如果遇到Crrl+Z,那么上面表达式的结果为EOF,对应的有符号数时-1;