关于文件的知识:
字符串的读写:
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 |
输出样例: | 34 39 49 65 71 75 91 93 455 723 |
提示: | 部分代码如下: /******************/
for(i = 0; i < 10; i++) if( fclose(fp1)) for(i = 0; i < 9; i++) |
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;
}