例如: ch=fgetc(Ep):/从打开的文件p中读取一个字符并存入ch中 说明: (1)在fgetc函数调用前,文件必须是以读或读写方式打开的。 (2)读取字符的结果也可以不向字符变量赋值。例如: fgetc(fp); /读出的字符不保存 (3)在文件内部有一个位置指针,用于指向文件的当前读写字节:在文件打开时,该 指针总是指向文件的第一个字节:使用fgtc函数后,该位置指针向后移动一个字节:因 此可连续使用fgete函数,读取多个字符。 注意:文件指针和文件内部的位置指针不同。文件指针是指向整个文件的,须在程序 中定义说明,只要不重新赋值,文件指针的值是不变的:文件内部的位置指针用于指示文 件内部的当前读写位置,每读写一次,该指针均向后移动,它不需要在程序中定义说明, 由系统自动设置。 2.字符写函数(putc) 格式:fputc(字符,文件指针): 功能:把一个字符写入指定的文件中。 说明: (1)待写入的字符可以是字符常量或变量。例如: fpute('a',p):/是把字符'a'写入fp所指文件中 (2)被写入的文件可以用写、追加方式打开,用写方式打开一个已存在的文件时将清 除原有的文件内容,写入字符从文件首部开始:如需要保留原有文件内容,希望写入的字 符在文件末尾存放,必须以追加方式打开文件。 (3)每写入一个字符,文件内部位置指针向后移动一个字节。 【例12.1】从键盘输入一行字符,写入文本文件中,再从文本文件读出字符显示在幕上。 程序知下: #include<stdio.h> int main ( FILE *fpin,*fpout char ch; if((fpin-fopen("d:\\cl.txt","wt"))=-NULL) printf("Cannot open file strike any key exit!"); return;/也可以用exit(1)终止程序 printf("input a string:\n"): ch-getchar(); /从键盘输入第一个字符 6
6 例如: ch=fgetc(fp); // 从打开的文件 fp 中读取一个字符并存入 ch 中 说明: (1)在 fgetc 函数调用前,文件必须是以读或读写方式打开的。 (2)读取字符的结果也可以不向字符变量赋值。例如: fgetc(fp); // 读出的字符不保存 (3)在文件内部有一个位置指针,用于指向文件的当前读写字节;在文件打开时,该 指针总是指向文件的第一个字节;使用 fgetc 函数后,该位置指针向后移动一个字节;因 此可连续使用 fgetc 函数,读取多个字符。 注意:文件指针和文件内部的位置指针不同。文件指针是指向整个文件的,须在程序 中定义说明,只要不重新赋值,文件指针的值是不变的;文件内部的位置指针用于指示文 件内部的当前读写位置,每读写一次,该指针均向后移动,它不需要在程序中定义说明, 由系统自动设置。 2.字符写函数(fputc) 格式:fputc(字符,文件指针); 功能:把一个字符写入指定的文件中。 说明: (1)待写入的字符可以是字符常量或变量。例如: fputc('a',fp); // 是把字符'a'写入 fp 所指文件中。 (2)被写入的文件可以用写、追加方式打开,用写方式打开一个已存在的文件时将清 除原有的文件内容,写入字符从文件首部开始;如需要保留原有文件内容,希望写入的字 符在文件末尾存放,必须以追加方式打开文件。 (3)每写入一个字符,文件内部位置指针向后移动一个字节。 【例 12.1】 从键盘输入一行字符,写入文本文件中,再从文本文件读出字符显示在幕上。 程序如下: #include<stdio.h> int main() { FILE *fpin,*fpout; char ch; if((fpin=fopen("d:\\c1.txt","wt"))==NULL) { printf("Cannot open file strike any key exit!"); return ; //也可以用 exit(1)终止程序 } printf("input a string:\n"); ch=getchar(); // 从键盘输入第一个字符
while(ch!='\n') fputc(ch,fpin) /将ch中的字符写入fpin指向的文件 ch=getchar(); /1从键盘输入下一个字符 fclose(fpin); if((fpout=fopen("d:\\c1.txt","rt"))==NULL) printf("\nCannot open file !") return ch=fgetc(fpout) /将文件的第一个字符读入ch中 while(ch!=EOF) 1字符ch 不是 文件结束标志 putchar (ch); ch=fgetc(fpout) /将文件的当前字符读入ch中 fclose(fpout); return 0; 1 在C标准函数库中,字符EOF(stdio.h中这个定义#define EOF(l)表示文件结束符(end off们e)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件, 必须是文本文件。在文本文件中,数据都是以字符的ASCI代码值的形式存放。我们知道, ASCⅡ代码值的范形是0255,不可能出现-1,因此可以用EOF作为文件结束标志。所以 上例中输出文件指针中的内容时用while(chl=EOF)来表示控制循环。 当然我们也可以在不确定循环的次数时使用OF来控制循环的结束,例如: while(scanf(%d%d",&m,&n)l=EOF)。EOF的输入因系统而定,windows下是ctrl+z linux/unix下是ctrl+d。 12.4.2字符串读写函数(fgets和fputs) 1.读字符串函数(fgets) gets0函数只接受一个参数,而gets0函数接受3个参数。gets0函数的第一个参数 和gets0函数一样,是用于存储输入的地址(char*类型):第二个参数为整数,表示输入 字符串的最大长度:最后一个参数是文件指针,指向要读取的文件。 格式:fgCt5(字符数组名,n,文件指针): 功能:从指定的文件中读一个字符串存入字符数组中。 说明:n表示从文件中读出的字符串不超过n1个字符,在读入的最后一个字符后自 动加上字符串结束标志0。例如: fgets(stx,n,fp):/从fp所指的文件中读出n-1个字符存入字符数组str中. 7
7 while (ch!='\n') { fputc(ch,fpin); // 将 ch 中的字符写入 fpin 指向的文件 ch=getchar(); // 从键盘输入下一个字符 } fclose(fpin); if((fpout=fopen("d:\\c1.txt","rt"))==NULL) { printf("\nCannot open file !"); return ; } ch=fgetc(fpout); // 将文件的第一个字符读入 ch 中 while(ch!=EOF) // 字符 ch 不是文件结束标志 { putchar(ch); ch=fgetc(fpout); // 将文件的当前字符读入 ch 中 } fclose(fpout); return 0; } 在 C 标准函数库中,字符 EOF(stdio.h 中这个定义#define EOF (-1)表示文件结束符(end of file)。在 while 循环中以 EOF 作为文件结束标志,这种以 EOF 作为文件结束标志的文件, 必须是文本文件。在文本文件中,数据都是以字符的 ASCII 代码值的形式存放。我们知道, ASCII 代码值的范围是 0~255,不可能出现-1,因此可以用 EOF 作为文件结束标志。所以 上例中输出文件指针中的内容时用 while(ch!=EOF)来表示控制循环。 当然我们也可以在不确定循环的次数时使用 EOF 来控制循环的结束,例如: while(scanf("%d%d", &m, &n)!= EOF)。EOF 的输入因系统而定,windows 下是 ctrl+z, linux/unix 下是 ctrl+d。 12.4.2 字符串读写函数(fgets 和 fputs) 1.读字符串函数(fgets) gets() 函数只接受一个参数,而 fgets() 函数接受 3 个参数。fgets() 函数的第一个参数 和 gets() 函数一样,是用于存储输入的地址 (char *类型);第二个参数为整数,表示输入 字符串的最大长度;最后一个参数是文件指针,指向要读取的文件。 格式:fgets(字符数组名,n,文件指针); 功能:从指定的文件中读一个字符串存入字符数组中。 说明:n 表示从文件中读出的字符串不超过 n-1 个字符,在读入的最后一个字符后自 动加上字符串结束标志'\0'。例如: fgets(str,n,fp); // 从 fp 所指的文件中读出 n-1 个字符存入字符数组 str 中