一 C语言对文件的操作通常分为两个对。
A:fwrite()和fread()
B:sscanf()和sprintf()
注意:这两对不能混在一起用,否则,会出错。
二 当我们向文件中写入或者读取文本文件的时候,最好是用sscanf()和sprintf()两个函数,因为它们能够有效的避免文本文件中出现的乱码的问题
A:读取文件中内容
while( fgets(buf,1024,fp) != NULL )//判断fp文件中的内容是否已经真的读完。注意:如果真的读完,它的返回值为1;否则,返回值为0
{
p2 = (struct book *)malloc(sizeof(struct book));
sscanf(buf,"%s %s %s %s %d %s %f\n",p2->data.auth,p2->data.name,p2->data.birth,p2->data.num,&p2->data.page,p2->data.place,&p2->data.price);
p2->next = NULL;//p2后面指置空
p1->next = p2;//将p2连接在p1的后面
p1 = p2;//将p2赋给p1
nCount ++;
}
B:向文件中写入内容
while(p != NULL) //判断p是否为空,以便进行循环
{
fprintf(fp,"%s %s %s %s %d %s %f\n",p->data.auth,p->data.name,p->data.num,p->data.birth,p->data.page,p->data.place,p->data.price);
p = p->next;
nCount++;//用于统计保存书籍记录的数目
}
三 当我们想文件中写入或者读取的是二进制文件的时候,一般最好用fread() 和fwrite(),因为这个时候文件里面放在也全部是乱码,具体的很多细节部分也不能理解的很清楚
A:读取文件中内容
while( feof(fp) == 0 )//判断fp文件中的内容是否已经真的读完。注意:如果真的读完,它的返回值为1;否则,返回值为0
{
p2 = (struct book *)malloc(sizeof(struct book));
if(fread(p2,sizeof(struct book),1,fp) == 1)//把fp文件中的内容全部放在p2
{
p2->next = NULL;//p2后面指置空
p1->next = p2;//将p2连接在p1的后面
p1 = p2;//将p2赋给p1
nCount ++;
}
}
B:向文件中写入内容
while(p != NULL) //判断p是否为空,以便进行循环
{
if(fwrite(p,sizeof(struct book),1,fp) == 1) //把p中的内容写到fp中
{
p = p->next; //p向后移动一
nCount++;//用于统计保存书籍记录的数目
}
else
{
flag=0;
break; //如果fwrite(p,sizeof(struct book),1,fp)返回值不是一,提前跳出循环
}
}