📄 32.htm
字号:
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 </p>
<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()函数读到空白符时,
便自动结束, 在使用时要特别注意。 </p>
<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"); <br>
exit(1); <br>
} <br>
fseek(fp, 8. 1, SEEK_SET); <br>
fgetc(fp); <br>
fclose(fp); <br>
} <br>
fread()函数是从文件中读count个字段,
每个字段长度为size个字节, 并把 <br>
它们存放到buf指针所指的缓冲器中。 <br>
fwrite()函数是把buf指针所指的缓冲器中,
长度为size个字节的count个字 <br>
段写到stream指向的文件中去。 <br>
随着读和写字节数的增大,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -