📄 王大刚--c语言编程宝典--1_2 文件的输入输出函数.htm
字号:
puts("File close error");/*提示关闭不成功*/ <BR> } <BR>
<P> 二、有关文件操作的函数 <BR>
本节所讲的文件读写函数均是指顺序读写, 即读写了一条信息后, 指针自动 <BR>加1。下面分别介绍写操作函数和读操作函数。 <BR>
<P> 1. 文件的顺序写函数 <BR>
fprintf()、fputs()和fputc()函数 <BR>
函数fprintf()、fputs()和fputc()均为文件的顺序写操作函数, 其调用格 <BR>式如下:
<BR> int fprintf(FILE *stream, char *format,
<variable-list>); <BR> int fputs(char *string,
FILE *steam); <BR> int fputc(int ch, FILE *steam);
<BR> 上述三个函数的返回值均为整型量。fprintf() 函数的返回值为实际写入文
<BR>件中的字罕个数(字节数)。如果写错误, 则返回一个负数, fputs()函数返回0时
<BR>表明将string指针所指的字符串写入文件中的操作成功, 返回非0时, 表明写操
<BR>作失败。fputc()函数返回一个向文件所写字符的值, 此时写操作成功, 否则返 <BR>回EOF(文件结束结束其值为-1,
在stdio.h中定义)表示写操作错误。 <BR> fprintf( )
函数中格式化的规定与printf( ) 函数相同, 所不同的只是
<BR>fprintf()函数是向文件中写入。而printf()是向屏幕输出。 <BR> 下面介绍一个例子,
运行后产后一个test.dat的文件。 <BR> 例11:
<BR> #include<stdio.h>
<BR> main() <BR> {
<BR> char *s="That's
good news"); /*定义字符串指针并初始化*/
<BR> int
i=617;
/*定义整型变量并初始化*/ <BR>
FILE
*fp;
/*定义文件指针*/ <BR>
fp=fopne("test.dat", "w"); /*建立一个文字文件只写*/
<BR> fputs("Your
score of TOEFLis", fp);/*向所建文件写入一串字符*/
<BR> fputc(':',
fp);
/*向所建文件写冒号:*/ <BR>
fprintf(fp, "%d\n", i); /*向所建文件写一整型数*/
<BR> fprintf(fp,
"%s", s); /*向所建文件写一字符串*/
<BR>
fclose(fp);
/*关闭文件*/ <BR> } <BR>
用DOS的TYPE命令显示TEST.DAT的内容如下所示: <BR> 屏幕显示
<BR> Your score of TOEFL is: 617
<BR> That's good news <BR>
<P> 2. 文件的顺序读操作函数 <BR>
fscanf()、fgets()和fgetc()函数 <BR>
函数fscanf()、fgets()和fgetc()均为文件的顺序读操作函数, 其调用格式 <BR>如下:
<BR> int fscanf(FILE *stream, char *format,
<address-list>); <BR> char fgets(char
*string, int n, FILE *steam); <BR> int fgetc(FILE
*steam); <BR> fscanf()函数的用法与scanf()函数相似,
只是它是从文件中读到信息。 <BR>fscanf()函数的返回值为EOF(即-1), 表明读错误, 否则读数据成功。fgets()函
<BR>数从文件中读取至多n-1个字符(n用来指定字符数), 并把它们放入string指向的 <BR>字符串中,
在读入之后自动向字符串未尾加一个空字符, 读成功返回string指针,
<BR>失败返回一个空指针。fgetc()函数返回文件当前位置的一个字符, 读错误时返 <BR>回EOF。
<BR> 下面程序读取例11产生的test.dat文件, 并将读出的结果显示在屏幕上。
<BR> 例12 <BR>
#include<stdio.h> <BR> main()
<BR> {
<BR> char *s, m[20];
<BR> int i;
<BR> FILE *fp;
<BR>
fp=fopen("test.dat", "r"); /*打开文字文件只读*/
<BR> fgets(s, 24,
fp);
/*从文件中读取23个字符*/ <BR>
printf("%s",
s);
/*输出所读的字符串*/ <BR>
fscanf(fp, "%d", &i);
/*读取整型数*/ <BR>
printf("%d",
i);
/*输出所读整型数*/ <BR>
putchar(fgetc(fp));
/*读取一个字符同时输出*/ <BR>
fgets(m, 17,
fp);
/*读取16个字符*/ <BR>
puts(m);
/*输出所读字符串*/ <BR>
fclose(fp);
/*关闭文件*/ <BR>
getch();
/*等待任一键*/ <BR> } <BR> 运行后屏幕显示:
<BR> Your score of TOEFL is: 617 <BR>
That's good news <BR> 如果将上例中fscanf(fp, "%d",
&i)改为fscanf(fp, "%s", m), 再将其后 <BR>的输出语句改为printf("%s", m),
则可得出同样的结果。由此可见Turbo C2. 0 <BR>中只要是读文字文件, 则不论是字符还是数字都将按其ASCII值处理。 另外还要
<BR>说明的一点就是fscanf()函数读到空白符时, 便自动结束, 在使用时要特别注意。 <BR>
<P> 3. 文件的随机读写 <BR>
有时用户想直接读取文件中间某处的信息, 若用文件的顺序读写必须从文件 <BR>头开始直到要求的文件位置再读, 这显然不方便。Turbo
C2.0提供了一组文件的 <BR>随机读写函数, 即可以将文件位置指针定位在所要求读写的地方直接读写。 <BR>
文件的随机读写函数如下: <BR> int fseek (FILE *stream, long offset,
int fromwhere); <BR> int fread(void *buf, int size, int
count, FILE *stream); <BR> int fwrite(void *buf, int
size, int count, FILE *stream); <BR> long ftell(FILE
*stream); <BR>
fseek()函数的作用是将文件的位置指针设置到从fromwhere开始的第offset <BR>字节的位置上,
其中fromwhere是下列几个宏定义之一: <BR> 文件位置指针起始计算位置fromwhere
<BR>━━━━━━━━━━━━━━━━━━━━━━━━━━━ <BR>
符号常数
数值 含义
<BR>─────────────────────────── <BR>
SEEK_SET
0 从文件开头 <BR>
SEEK_CUR
1 从文件指针的现行位置
<BR>
SEEK_END
2 从文件末尾
<BR>━━━━━━━━━━━━━━━━━━━━━━━━━━━ <BR>
offset是指文件位置指针从指定开始位置(fromwhere指出的位置)跳过的字 <BR>节数。它是一个长整型量,
以支持大于64K字节的文件。fseek()函数一般用于对 <BR>二进制文件进行操作。 <BR>
当fseek()函数返回0时表明操作成功, 返回非0表示失败。 <BR>
下面程序从二进制文件test_b.dat中读取第8个字节。 <BR> 例13:
<BR> #include<stdio.h>
<BR> main() <BR> {
<BR> FILE *fp;
<BR>
if((fp=fopen("test_b.dat", "rb"))==NULL)
<BR> {
<BR>
printf("Can't open file");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -