大家好,我是电气学院学生第二党支部入党积极分子李汉东。在疫情期间我们推出了MS office的考试教程。不忘初心、牢记使命,接下来推出的是计算机二级考试中的C语言备考教程。我们依旧在为同学们提供服务,在学习期间有什么疑问或建议,随时欢迎同学们与我们取得联系。
本期主要内容是:
1、位运算
2、c语言文件类型指针
3、文件的打开与关闭
4、文件的读写及定位
以下是详细的视频讲解。

1、位运算

列子:



2、c语言文件类型指针

我们在定义文件类型指针变量后,称作该指针指向该文件,但本质上,它是指向一个存储文件信息的结构型变量
那么我们在用各个函数对所谓的“文件指针”进行操作时,本质上是函数通过获取文件指针所指向的文件信息内部的数据,才进行真正意义上的文件操作
比方说读写时候的文件内部的那个一位一位移动的指针其实是结构型变量里的一个成员
c语言文件类型指针是通过FILE *fp; 这种形式进行定义的。



3、文件的打开与关闭
3.1 文件在读写之前应该先打开文件,使用结束之后应该关闭文件.
3.2 打开与关闭文件所对应的一组函数为fopen,fclose.
3.3 关于文件的打开方式(也就是fopen中参数char* mode)大致有以下几种:
3.3.1 “r”(只读) 含义是:为了输入数据,打开一个已经存在的文本文件,如果指定文件不存在就会出错
3.3.2 “w”(只写) 含义是:为了输出数据,打开一个文本文件,如果指定文件不存在就会建立一个新的文件
3.3.3 “a”(追加) 含义是:向文本文件末尾添加数据,如果指定文件不存在就会出错
3.3.4“rb”(只读) 含义是:为了输入数据,打开一个二进制文件,如果指定文件不存在就会出
3.3.5 “wb”(只写) 含义是:为了输出数据,打开一个二进制文件,如果指定文件不存在就会建立一个新的文件
3.3.6 “ab”(追加) 含义是:向一个二进制文件末尾添加数据,如果指定文件不存在就会出错
3.4 文件一旦使用完毕,应该用fclose()函数把文件关闭,以释放相关资源,避免数据丢失。fclose() 的原型为:
int fclose(FILE *fp);
fp 为文件指针。例如:
fclose(fp);
文件正常关闭时,fclose() 的返回值为0,如果返回非零值则表示有错误发生。
来看一个简单的使用例子:


4、文件的读写及定位
#include
#define SIZE 5
#define NAM_SIZE 10
#define NUM_SIZE 10
#define TEL_SIZE 12
char filename[50];
struct student
{
char name[NAM_SIZE];
char num[NUM_SIZE];
int age;
char tel[TEL_SIZE];
}stu[SIZE],st;
bool save();
int main()
{
FILE *fp;
int pos=1;
if(save())
{
if(!(fp=fopen(filename,"rb+")))
{
printf("Can't open %s",filename);
return -1;
}
fseek(fp,pos*sizeof(student),0);
if(fread(&st,sizeof(student),1,fp)==1)
{
printf("name\tnum\tage\t tel\n");
printf("%s\t%s\t%1d\t%s\n",st.name,st.num,st.age,st.tel);
}
else
return -1;
fseek(fp,pos*sizeof(student),1);
if(fread(&st,sizeof(student),1,fp)==1)
{
printf("name\tnum\tage\t tel\n");
printf("%s\t%s\t%1d\t%s\n",st.name,st.num,st.age,st.tel);
}
else
return -1;
fseek(fp,-pos*sizeof(student),2);
if(fread(&st,sizeof(student),1,fp)==1)
{
printf("name\tnum\tage\t tel\n");
printf("%s\t%s\t%1d\t%s\n",st.name,st.num,st.age,st.tel);
}
else
return -1;
}
else
{
printf("存储错误!!!\n");
return -1;
}
return 0;
}
bool save()
{
FILE *fp;
int i;
printf("Please input %d students's name num age and telephone:\n",SIZE);
for(i=0;i
scanf("%s %s %d %s",&stu[i].name,&stu[i].num,&stu[i].age,&stu[i].tel);
printf("Please input your filename:");
scanf("%s",filename);
if(!(fp=fopen(filename,"wb")))
{
printf("Can not open %s\n",filename);
return false;
}
for(i=0;i
if(fwrite(&stu[i],sizeof(student),1,fp)!=1)
printf("文件写入失败!\n");
fclose(fp);
return true;
}
运行结果:



图文来源:学生第二党支部入党积极分子李汉东
排版:林进劲
校对:于瀛
审核:陈金涛老师