#include <stdlib.h>
/**C语言中怎样竖段读取文件数据并对数据排序再重新写入文件*/
int main()
{
FILE *fp,*fpn //创建文件指针fp和fpn
int a[10],b[10],i,j,temp //a数组用来山腊存入数据b数组用来接受文件数据进行重新排序输出
for(i = 0i <10i++)
{
a[i] = i //初始化赋值
}
if((fp = fopen("data.dat","wb")) == NULL) //以只写的方式打开一个二进制文件,没有则自行建立,有的话就进行覆盖
{
printf("Error!\n")
exit(1)
}
fwrite(a,sizeof(a),1,fp) //进行一次余唯誉写入,写入sizeof大小,将a写入到fp所指向的文件中
fclose(fp)//写完之后关闭文件指针
if((fpn = fopen("data.dat","rb")) == NULL) //以只读的方式打开一个二进制文件
{
printf("Error!\n")
exit(1)
}
for(i = 0i <10i++)
{
fread(&b[i],sizeof(int),1,fpn)//用循环进行读取,每次读取int大小,从fpn所指向的文件读取,存入b数组中
}
fclose(fpn) //关闭文件指针
for(i = 0i <9i++) //冒泡排序
{
for(j = 0j <10 - i - 1j++)
{
if(b[j] <b[j + 1])
{
temp = b[j]
b[j] = b[j+1]
b[j+1] = temp
}
}
}
for(i = 0i <10i++) //输出
{
printf("%d\t",b[i])
}
return 0
}
很久没写了,有很多不足,希望见谅!
顺序不对 先凳贺读 然后再删除fp=fopen("a.dat","rb")
fread(&n,sizeof(int),n,fp)
del()(删除内容)
fclose
fp=fopen("a.dat","rb")
fwrite(&n,sizeof(int),n-1,fp);
fclose
同时要注意删闹亩除时候数据的连续 以及后续写入的大小
另外 你的fread(&n,sizeof(int),n,fp)
这里两个枣弯派n必须是不同的
前一个是一个数据的buffer 后一个是代表数据的总长度
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)