顺序读写数字文件
1.1 怎样向文件读写字符
字符读写函数是以字符(字节)为单位的读写函数。 每次可从文件读出或向文件写入一个 字符。
1.读字符函数 fgetc
2.fgetc函数的功能是从指定的文件中读一个字符,函数调用的形式为:
字符变量=fgetc(文件指针);
例如:
ch=fgetc(fp);
3.其意义是从打开的文件 fp 中读取一个字符并送入 ch 中。 对于 fgetc 函数的使用有以下几点说明:
(1) 在 fgetc 函数调用中,读取的文件必须是以读或读写方式打开的。
(2) 读取字符的结果也可以不向字符变量赋值, 例如: fgetc(fp); 但是读出的字符不能保存。
(3) 在文件内部有一个位置指针。用来指向文件的当前读写字节。在文件打开时,该指 针总是指向文件的第一个字节。使用 fgetc 函数后,该位置指针将向后移动一个字 节。 因此可连续多次使用 fgetc 函数,读取多个字符。应注意文件指针和文件内部 的位置指针不是一回事。文件指针是指向整个文件的,须在程序中定义说明,只要 不重新赋值,文件指针的值是不变的。文件内部的位置指针用以指示文件内部的当 前读写位置,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由 系统自动设置的。
1.2 写字符函数 fputc
fputc 函数的功能是把一个字符写入指定的文件中,函数调用的形式为:
fputc(字符量,文件指针);
其中,待写入的字符量可以是字符常量或变量,
例如:
fputc(‘a’,fp);
其意义是把字符 a 写入 fp 所指向的文件中。 对于 fputc 函数的使用也要说明几点: (1) 被写入的文件可以用写、读写、追加方式打开,用写或读写方式打开一个已存在的 文件时将清除原有的文件内容,写入字符从文件首开始。如需保留原有文件内容, 希望写入的字符以文件末开始存放,必须以追加方式打开文件。被写入的文件若不 存在,则创建该文件。
(2) 每写入一个字符,文件内部位置指针向后移动一个字节。
(3) fputc 函数有一个返回值,如写入成功则返回写入的字符,否则返回一个 EOF。可用 此来判断写入是否成功
2.字符串读写函数 fgets 和 fputs
2.1 读字符串函数 fgets
1.函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为:
fgets(字符数组名,n,文件指针);
其中的 n 是一个正整数。表示从文件中读出的字符串不超过 n-1 个字符。在读入的最后 一个字符后加上串结束标志’\0’。
例如:
fgets(str,n,fp);
他的意义是从 fp 所指的文件中读出 n-1 个字符送入字符数组 str 中。
例:
#include<stdio.h>
#include<Windows.h>
int main()
{
FILE *fp;
char str[11];
if((fp=fopen("string.txt","rt"))==NULL)
{
printf("Can not open file strike any key exit!\n");
system("pause");
}
fgets(str,11,fp);
printf("\n%s\n",str);
fclose(fp);
system("pause");
return 0;
}
本例定义了一个字符数组 str 共 11 个字节,在以读文本文件方式打开文件 string 后, 从中读出 10 个字符送入 str 数组,在数组最后一个单元内将加上’\0’,然后在屏幕上显示输 出 str 数组。
对 fgets 函数有两点说明:
- 在读出 n-1 个字符之前,如遇到了换行符或 EOF,则读出结束。
- fgets 函数也有返回值,其返回值是字符数组的首地址。
2.2 写字符串函数fputs
fputs 函数的功能是向指定的文件写入一个字符串,其调用形式为:
fputs(字符串,文件指针);
其中字符串可以是字符串常量,也可以是字符数组名,或指针变量,
例如:
fputs(“abcd“,fp);
其意义是把字符串“abcd”写入 fp 所指的文件之中。
例:
#include<stdio.h>
#include<Windows.h>
int main()
{
FILE *fp;
char ch,st[20];
if((fp=fopen("string","at+"))==NULL)
{
printf("Can not open file strike any key exit!");
system("pause");
}
printf("input a string:\n");
scanf("%s",st);
fputs(st,fp);
rewind(fp);
ch=fgetc(fp);
while(ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
printf("\n");
fclose(fp);
system("pause");
return 0;
}