二、有关文件操作的函数
本节所讲的文件读写函数均是指顺序读写,即读写了一条信息后,指针自动加1。下面分别介绍写操作函数和读操作函数。
1.文件的顺序写函数
fprintf()、fputs()和fputc()函数
函数fprintf()、fputs()和fputc()均为文件的顺序写操作函数,其调用格式如下:
int fprintf(FILE *stream, char *format, <variable-list>);
int fputs(char *string, FILE *steam);
int fputc(int ch, FILE *steam);
上述三个函数的返回值均为整型量。fprintf()函数的返回值为实际写入文件中的字罕个数(字节数)。如果写错误,则返回一个负数,fputs()函数返回0时表明将string指针所指的字符串写入文件中的操作成功,返回非0时,表明写操作失败。fputc()函数返回一个向文件所写字符的值,此时写操作成功,否则返回EOF(文件结束结束其值为-1,在stdio.h中定义)表示写操作错误。
fprintf( ) 函数中格式化的规定与printf( ) 函数相同,所不同的只是fprintf()函数是向文件中写入。而printf()是向屏幕输出。
下面介绍一个例子, 运行后产后一个test.dat的文件。
例11:
#include<stdio.h>
main()
{
char *s="That's good news"); /*定义字符串指针并初始化*/
int i=617; /*定义整型变量并初始化*/
FILE *fp; /*定义文件指针*/
fp=fopne("test.dat", "w"); /*建立一个文字文件只写*/
fputs("Your score of TOEFLis", fp);/*向所建文件写入一串字符*/
fputc(':', fp); /*向所建文件写冒号:*/
fprintf(fp, "%d\n", i); /*向所建文件写一整型数*/
fprintf(fp, "%s", s); /*向所建文件写一字符串*/
fclose(fp); /*关闭文件*/
}
用DOS的TYPE命令显示TEST.DAT的内容如下所示:
屏幕显示
Your score of TOEFL is: 617
That's good news
2. 文件的顺序读操作函数
fscanf()、fgets()和fgetc()函数
函数fscanf()、fgets()和fgetc()均为文件的顺序读操作函数,其调用格式如下:
int fscanf(FILE *stream, char *format, <address-list>);
char fgets(char *string, int n, FILE *steam);
int fgetc(FILE *steam);
fscanf()函数的用法与scanf()函数相似,只是它是从文件中读到信息。fscanf()函数的返回值为EOF(即-1),表明读错误,否则读数据成功。fgets()函数从文件中读取至多n-1个字符(n用来指定字符数),并把它们放入string指向的字符串中,在读入之后自动向字符串未尾加一个空字符,读成功返回string指针,失败返回一个空指针。fgetc()函数返回文件当前位置的一个字符,读错误时返回EOF。
下面程序读取例11产生的test.dat文件, 并将读出的结果显示在屏幕上。
例12
#include<stdio.h>
main()
{
char *s, m[20];
int i;
FILE *fp;
fp=fopen("test.dat", "r"); /*打开文字文件只读*/
fgets(s, 24, fp); /*从文件中读取23个字符*/
printf("%s", s); /*输出所读的字符串*/
fscanf(fp, "%d", &i); /*读取整型数*/
printf("%d", i); /*输出所读整型数*/
putchar(fgetc(fp)); /*读取一个字符同时输出*/
fgets(m, 17, fp); /*读取16个字符*/
puts(m); /*输出所读字符串*/
fclose(fp); /*关闭文件*/
getch(); /*等待任一键*/
}
运行后屏幕显示:
Your score of TOEFL is: 617
That's good news
如果将上例中fscanf(fp, "%d", &i)改为fscanf(fp, "%s", m),再将其后的输出语句改为printf("%s", m),则可得出同样的结果。由此可见Turbo C2. 0中只要是读文字文件,则不论是字符还是数字都将按其ASCII值处理。另外还要说明的一点就是fscanf()函数读到空白符时,便自动结束,在使用时要特别注意。