常用C函数(3)

2019-03-27 19:34

ch = fgetc(fp); if (ferror(fp)) {

/* 如果此操作错误,就发布错误信息*/ printf(\ /*复位错误标志*/ clearerr(fp); }

/*关闭文件*/ fclose(fp); return 0; }

例程说明:

(1)首先程序以只写的方式打开一个文件名为”test.txt”的文件。这样,该文件就只能写而不能读了。

(2)程序企图应用fgetc函数从fp所指的文件中读出一个字符,这当然是违法的,因此文件自动产生错误标志。

(3)当用ferror函数检测出文件流存在错误时,就发布一条错误信息,并用clearerr函数清除fp指定的文件流所使用的错误标志,也就是使fp所指的文件的错误标志和文件结束标志置0。这样原先的错误就不会对文件的后续操作产生影响。

注意:ferror函数与clearerr函数应该配合使用。也就是说,通过ferror函数检测出文件有错误标志后要用clearerr函数复位错误标志。

feof:检测文件结束符函数

函数原型:int feof(FILE *fp); 头文件:#include 是否是标准函数:是

函数功能:检测流上的文件结束符,即:检测文件是否结束。应用该函数可以判断一个文件是否到了结尾。在读取一个未知长度文件时,这个函数很有用。

返回值:遇到文件结束符返回非0,否则返回0。 例程如下::检测文件结束标志演示。

#include

int main(void) {

FILE *stream;

/* 以只读方式打开test.txt文件 */ stream = fopen(\ /* 从文件中读取一个字符 */ fgetc(stream);

/*检测是否是EOF,即结束标志 */ if (feof(stream))

printf(\ /* 关闭该文件 */ fclose(stream); return 0; }

例程说明:

(1)首先程序打开一个名为test.txt的文件。

(2)应用fgetc函数从一个名为test.txt的文件中读取一个字符。 (3)判断它是否为文件结束标志EOF,如果是文件结束标志,就说明该文件已经结束,于是在屏幕上显示一条提示信息。如果不是文件的结束标志,就说明文件还未结束,信息不显示。

(4)最后关闭文件。

注意:在实际应用中,feof函数很重要,利用它程序员就可以很方便地判断当前的文件是否结束,从而进行不同的处理。例如,在从一个未知长度的文件中读取信息时,就可以利用feof函数判断什么时候该文件读完。

ferror:检测流上的错误函数

函数原型:int ferror(FILE *fp); 头文件:#include 是否是标准函数:是

函数功能:检测流上的错误。即:检查文件在使用各种输入输出函数进行读写时是否出错。当输入输出函数对文件进行读写时出错,文件就会产生错误标志。应用这个函数,就可以检查出fp所指向的文件操作是否出错,也就是说是否有错误标志。

返回值:未出错返回值为0,否则返回非0,表示有错。 例程如下:应用ferror函数检查流上的错误。

#include int main(void) {

FILE *fp; char ch;

/* 以写的方式打开一个文件名为test.txt的文件 */ fp = fopen(\

/* 错误地从fp所指定的文件中读取一个字符,并打印它*/ ch = fgetc(fp); printf(\ if (ferror(fp)) {

/* 如果此操作错误,就发布错误信息*/ printf(\ /*复位错误标志*/ clearerr(fp); }

/*关闭文件*/ fclose(fp); return 0; }

例程说明:

(1)首先以只写的方式打开一个文件名为”test.txt”的文件。这样,该文件就只能写而不能读了。程序企图用fgetc函数从fp所指的文件中读出一个字符,这样就是非法操作,也就是说在用fgetc函数进行读取字符时出错了,因此文件产生错误标志。

(2)再用ferror函数来检测输入输出函数进行文件读写操作时是否出错,结果发现有错,因此函数返回一个非0整型数,并提示出错信息。

fflush:清除文件缓冲区函数

函数原型:int fflush(FILE *fp); 头文件:#include 是否是标准函数:是

函数功能:清除一个流,即清除文件缓冲区,当文件以写方式打开时,将缓冲区内容写入文件。也就是说,对于ANSI C规定的是缓冲文件系统,函数fflush用于将缓冲区的内容输出到文件中去。

返回值:如果成功刷新,fflush返回0。指定的流没有缓冲区或者只读打开时也返回0值。返回EOF指出一个错误。

例程如下:第一种方式读写文件

#include #include #include #include

int main(void) {

FILE *stream1,*stream2; char test[20]=\char res[20];

/*以写的方式打开文件test.txt*/ stream1 = fopen(\ /*向文件写入字符串*/

fwrite(test,15,1,stream1);

/*以读的方式打开文件test.txt*/ stream2 = fopen(\ /*将文件内容读入缓冲区*/ if(fread(res,15,1,stream2)) printf(\else

printf(\fclose(stream1); fclose(stream2); getch(); return 0; }

例程如下::第二种方式读写文件

#include #include #include #include

int main(void) {

FILE *stream1,*stream2; char test[20]=\char res[20];

/*以写的方式打开文件test.txt*/ stream1 = fopen(\ /*向文件写入字符串*/

fwrite(test,15,1,stream1); /*将缓冲区的内容写入文件*/ fflush(stream1);

/*以读的方式打开文件test.txt*/ stream2 = fopen(\ /*将文件内容读入缓冲区*/ if(fread(res,15,1,stream2)) printf(\else

printf(\fclose(stream1); fclose(stream2); getch(); return 0; }

例程说明:

例程如下:中定义了两个文件指针stream1和stream2。

(1)首先以写的方式打开文件test.txt,用指针stream1指向该文件,并向文件中写入字符串\。

(2)不关闭该文件,以读的方式打开文件test.txt,并用指针stream2指向该文件,试图将刚刚写入的字符串读入到内存缓冲区中。如果读入成功,打印出该字符串,否则报错。

实践证明,例程如下:的输出结果是在屏幕上显示错误信息Read error!。 例程如下:中定义了两个文件指针stream1和stream2。

(1)首先以写的方式打开文件test.txt,用指针stream1指向该文件,并向文件中写入字符串\。

(2)调用fflush函数将缓冲区的内容写入文件。

(3)不关闭该文件,以读的方式打开文件test.txt,并用指针stream2指向该文件,试图将刚刚写入的字符串读入到内存缓冲区中。如果读入成功,打印出该字符串,否则报错。

实践证明,例程如下:的输出结果是在屏幕上显示字符串\。

产生这样的效果原因在于:例程如下:中将文件打开后,指针stream1指向的是该文件的内存缓冲区,将字符串写入后也只是写到了文件的内存缓冲区中,而并没有写到磁盘上的文件中。而当以读的方式打开该文件时,该文件中的内容实际为空,也就是stream2指向的缓冲区中内容为空。因此读文件发生错误。而例程如下:中,在写完文件后调用函数fflush,将缓冲区的内容写到文件中,这样再以读的方式打开该文件时,文件中已经存有了字符串,因此可以正常读出。

注意:如果在写完文件后调用函数fclose关闭该文件,同样可以达到将缓冲区的内容写到文件中的目的,但是那样系统开销较大。

fgetc:从流中读取字符函数

函数原型:int fgetc(FILE *fp); 头文件:#include 是否是标准函数:是 函数功能:从流中读取字符,即从fp所指定的文件中取得下一个字符。这里需要注意,在每取完一个字符时fp会自动向下移动一个字节。这样编成时,程序员就不用再对fp控制了。这种功能在许多读写函数中都有体现。

返回值:返回所得到的字符,若读入错误。返回EOF。 例程如下:应用fgetc函数从文件中自动读取字符。

#include

#include #include int main(void) {

FILE *fp;

char string[] = \ char ch;

/* 以读写方式打开一个名为test.txt的文件 */ fp = fopen(\

/* 向文件中写入字符串string */ fwrite(string, strlen(string), 1, fp); /* 将fp指针指向文件首 */ fseek(fp, 0, SEEK_SET); do {

/* 从文件中读一个字符 */ ch = fgetc(fp);

/* 显示该字符 */ putch(ch);

} while (ch != EOF); fclose(fp); return 0; }

例程说明:

(1)首先程序先以读写方式打开一个名为test.txt的文件,并向该文件中写入一个字符串。

(2)再应用fseek函数将文件指针fp定位在文件的开头,再循环地将字符逐一读出。这里每读出一个字符,指针fp会自动地向后移一个字节,直至读到文件尾,即EOF标志,循环才停止。因为fgetc函数的返回值为得到的字符,所以用一个字符型变量ch 来接受读出的字符。

(3)最后的运行结果是在屏幕上打印出This is a test字符串。

fgetpos:取得当前文件的句柄函数

函数原型:int fgetpos( FILE *stream, fpos_t *pos ); 头文件:#include 是否是标准函数:是 函数功能:取得当前文件的指针所指的位置,并把该指针所指的位置数存放到pos所指的对象中。pos值以内部格式存储,仅由fgetpos和fsetpos使用。其中fsetpos的功能与fgetpos相反,为了详细介绍,将在后节给与说明。

返回值:成功返回0,失败返回非0,并设置errno。

例程如下:应用fgetpos函数取得当前文件的指针所指的位置。

#include #include int main(void) {

FILE *fp;

char string[] = \ fpos_t pos;

/* 以读写方式打开一个名为test.txt的文件 */


常用C函数(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:数据库系统原理参考答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: