C语言文件部分的题
题目:已知一个二进制数据文件中存放了10个整型数据,将他们排序后存入另一个二进制文件中。我的源代码:(CodeBlocks环境)#include<stdio.h>#inc...
题目:
已知一个二进制数据文件中存放了10个整型数据,将他们排序后存入另一个二进制文件中。
我的源代码:(Code Blocks 环境)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[10],temp=0,i=0,j=0,k=0;
char filename1[80], filename2[80];
FILE *fp,*fp1;
scanf("%s", filename1);
scanf("%s", filename2);
if((fp=fopen(filename1,"rb+"))==NULL)
{
printf("File open error!\n");
exit(1);
}
if((fp1=fopen(filename2,"wb+"))==NULL)
{
printf("File open error!\n");
exit(1);
}
for(i=0;i<9;i++)
{
fread(&a[i],sizeof(int),1,fp);
}
for(i=0;i<9;i++)
{
temp=a[i];
for(j=i+1;j<9;j++)
{
if(temp>a[j])
{
temp=a[j];
k=j;
}
}
a[k]=a[i];
a[i]=temp;
}
for(i=0;i<10;i++)
{
fwrite(&a[i],sizeof (int),1,fp1);
}
if(!fclose(fp))
{
printf("File close error!\n");
exit(1);
}
if(!fclose(fp1))
{
printf("File close error!\n");
exit(1);
}
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个整型数据,将他们排序后存入另一个二进制文件中。
我的源代码:(Code Blocks 环境)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[10],temp=0,i=0,j=0,k=0;
char filename1[80], filename2[80];
FILE *fp,*fp1;
scanf("%s", filename1);
scanf("%s", filename2);
if((fp=fopen(filename1,"rb+"))==NULL)
{
printf("File open error!\n");
exit(1);
}
if((fp1=fopen(filename2,"wb+"))==NULL)
{
printf("File open error!\n");
exit(1);
}
for(i=0;i<9;i++)
{
fread(&a[i],sizeof(int),1,fp);
}
for(i=0;i<9;i++)
{
temp=a[i];
for(j=i+1;j<9;j++)
{
if(temp>a[j])
{
temp=a[j];
k=j;
}
}
a[k]=a[i];
a[i]=temp;
}
for(i=0;i<10;i++)
{
fwrite(&a[i],sizeof (int),1,fp1);
}
if(!fclose(fp))
{
printf("File close error!\n");
exit(1);
}
if(!fclose(fp1))
{
printf("File close error!\n");
exit(1);
}
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;
}
编译没错,运行的结果是一推乱七八糟的数字,怎么回事啊??? 展开
2个回答
展开全部
for(i=0;i<10;i++) //这里是 i<10 才能读10次
{
fread(&a[i],sizeof(int),1,fp);
}
for(i=0;i<9;i++)
{
temp=a[i];
k=i; //要加一句这个,如果原来就是最小的,k就是i
for(j=i+1;j<10;j++) // 这里也是 j<10
{
if(temp>a[j])
{
temp=a[j];
k=j;
}
}
a[k]=a[i];
a[i]=temp;
}
上面是排序的问题。
后面 if(!fclose(fp)) 这些,应该是 if(fclose(fp)) 没有 ! 文件指针释放成功是返回0
最后你说的出来乱数字
for(i=0;i<9;i++)
printf("%d ",a[i]); //输出要加个空格隔开。
这个题目是从二进制文件中读取整型数字,不知道你测试时是怎么弄的二进制文件,如果文本文件格式存储的数字,出来的数肯定不是你想要的。
你可以另外写一程序,把10个数写入一个二进制文件。用这个文件来测试。
{
fread(&a[i],sizeof(int),1,fp);
}
for(i=0;i<9;i++)
{
temp=a[i];
k=i; //要加一句这个,如果原来就是最小的,k就是i
for(j=i+1;j<10;j++) // 这里也是 j<10
{
if(temp>a[j])
{
temp=a[j];
k=j;
}
}
a[k]=a[i];
a[i]=temp;
}
上面是排序的问题。
后面 if(!fclose(fp)) 这些,应该是 if(fclose(fp)) 没有 ! 文件指针释放成功是返回0
最后你说的出来乱数字
for(i=0;i<9;i++)
printf("%d ",a[i]); //输出要加个空格隔开。
这个题目是从二进制文件中读取整型数字,不知道你测试时是怎么弄的二进制文件,如果文本文件格式存储的数字,出来的数肯定不是你想要的。
你可以另外写一程序,把10个数写入一个二进制文件。用这个文件来测试。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询