再读标准IO中的读函数
时间:2016-12-30作者:华清远见
在标准IO中,对于文件的读写无非三种方式:
(1) 每次一个字符的I / O。 似乎这些函数看起来很简单,但只有理解了这些函数,你才知道该如何使用,例如怎样来判断读取的文件是否结束,怎样来统计文件的行数,等等。 下面先来回顾下读取文件的三种方式,然后再举例看下怎样使用。 一次读或写一个字符,使用getc、fgetc或getchar。如果流是带缓存的,则标准I / O函数处理所有缓存。三个函数原型如下:
#include <stdio.h> 三个函数的返回:若成功则为下一个字符,若已处文件尾端或出错则为E O F。强调的是不管是出错还是到达文件尾端,这三个函数都返回同样的值。为了区分这两种不同的情况,必须调用ferror()或feof()。
一次读或写一行,使用f g e t s和gets。两个函数原型如下: 两个函数返回:若成功则为buf,若已处文件尾端或出错则为null。这两个函数都指定了缓存地址,读入的行将送入其中。gets()从标准输入读,而fgets()则从指定的流读。 对于fgets(),必须指定缓存的长度为n。此函数一直读到下一个新行符为止,但是不超过n-1个字符,读入的字符被送入缓存,该缓存以null字符结尾。如若该行,包括后一个新行符的字符数超过n-1,则只返回一个不完整的行,而且缓存总是以null字符结尾。对fgets()的下一次调用会继续读该行。
直接I / O使用的是fread。每次I / O操作读某种数量的对象,而每个对象具有指定的长度。这个函数常用于从二进制文件中读一个结构。原型如下: 这个函数返回:读的对象数。fputs()在遇到null字节时就停止,而在结构中可能含有null字节,所以不能使用每次一行函数实现这种要求,而fread能使我们一次读整个结构。 下面看下如何利用上面提到的标准IO读函数来判断你读取的文件是否结束以及如何来统计文件的行数。 1、判断文件结束有三种方式:
a) 当用fgetc(src)返回的int值为EOF时,读到文件的末尾 实现起来简单明了,就不再细说。 2、统计文件的行数
a) 当用fgetc(src)返回的int值为’\n’时行数加一
程序如下: 发表评论
|