二进制文件的操作

关于文件的知识:

字符串的读写:

char *fgets(char *s,int n,FILE *fp)

int fputs(char *s,FILE *fp)

字符的读写:

int fputc(int c,FILE *fp); 将字符c从写入文件指针fp指向的文件当前位置。若成功则返回c,否则返回EOF。

int fgetc(FILE *fp) 从文件指针fp指向的文件当前位置读取一个字符返回。

无格式读写:

int fwrite(void *buffer,int size,int n,FILE *fp);

从程序数据区地址buffer开始,将连续size个字节的内容作为一个字段,一共n个字段写入fp指向的缓冲区,返回值是实际写入的数据块个数。

int fread(void *buffer,int size,int n,FILE *fp)

从fp指向的缓冲区,将连续size个字节的内容作为一个字段,一共n个字段写入buffer指向的空间,返回值为实际读到的数据块个数。




标题:

2. 数据文件

时 限:

1000 ms

内存限制:

10000 K

总时限:

3000 ms

描述:

已知一个文件中存放了10个整型数据,将他们排序后存入另一个文件。

输入:

存放了10个整型数据的二进制数据文件名(包含全路径)

输出:

排序后的数据,并将其存入结果数据文件中。

输入样例:

E:\\DATA\\71\\f0.dat
E:\\DATA\\71\\result.dat

输出样例:

34 39 49 65 71 75 91 93 455 723

提示:

部分代码如下:
int main(void)
{
int a[10], temp = 0, i = 0, j = 0, k = 0;
char filename1[80], filename2[80];
FILE *fp1,*fp2;

/******************/
/*在此编写代码*/
/******************/


/*验证结果的代码,请不要改动*/
if((fp1 = fopen(filename2, "rb")) == NULL)
{
printf("Result file open error!\n");
exit(1);
}

for(i = 0; i < 10; i++)
{
fread(&a[i], sizeof(int), 1, fp1); /* 读出数据 */
}

if( fclose(fp1))
{
printf("Result file close error!\n");
exit(1);
}

for(i = 0; i < 9; i++)
printf("%d ", a[i]);
printf("%d\n", a[i]);

return 0;
}


int fwrite(void *buffer,int size,int n,FILE *fp);

int fread(void *buffer,int size,int n,FILE *fp);

fwrite从程序数据区地址buffer开始,将连续size个字节的内容作为一个字段,一共n个字段写入fp指向的缓冲区,返回值是实际写入的数据块个数;

fread从fp指向的缓冲区,将连续size个字节的内容作为一个字段,一共n的字段写入buffer指向的空间,返回值为实际读到的数据块个数。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
main()
{
	int  a[10], temp = 0, i = 0, j = 0, k = 0;
	char filename1[80], filename2[80];
	FILE *fp1,*fp2;

	/******************/
	gets(filename1);
	gets(filename2);
	if(!(fp2=fopen(filename1,"rb")))
	{
		printf("File open error!\n");
		exit(1);
	}
	fread(a,sizeof(int),10,fp2);
	fclose(fp2);
	for(i=0;i<9;i++)
	{
		k=i;
		for(j=i+1;j<10;j++)
		{
			if(a[k]>a[j])
				k=j;
			if(k!=i) 
			{
				temp=a[k];
				a[k]=a[i];
				a[i]=temp;
			}
		}
	}//排序
	if(!(fp1=fopen(filename2,"wb")))
	{
		printf("File open error!\n");
		exit(1);
	}
	fwrite(a,sizeof(int),10,fp1);
	fclose(fp1);
	/******************/


	/*验证结果的代码,请不要改动*/
	if((fp1 = fopen(filename2, "rb")) == NULL)
	{
		printf("Result file open error!\n");
		exit(1);
	}

	for(i = 0; i < 10; i++)
	{
		fread(&a[i], sizeof(int), 1, fp1);       /*  读出数据 */
	}

	if( fclose(fp1))
	{
		printf("Result file close error!\n");
		exit(1);
	}

	for(i = 0; i < 9; i++)
		printf("%d ", a[i]);
	printf("%d\n", a[i]);

	return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值