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;
}

编译没错,运行的结果是一推乱七八糟的数字,怎么回事啊???
展开
 我来答
德昂当
推荐于2017-10-06 · TA获得超过2842个赞
知道大有可为答主
回答量:1074
采纳率:100%
帮助的人:734万
展开全部
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个数写入一个二进制文件。用这个文件来测试。
uajwmxj
2011-05-18 · TA获得超过724个赞
知道答主
回答量:353
采纳率:100%
帮助的人:0
展开全部
while(!feof(fp))
{
ch=fgetc(fp);
n++;

}

在这里改成if(ch!=null)试一试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式