菜鸟请教高手关于c语言的问题,在线等,请大哥哥大姐姐们指点,跪求,跪求,跪求
有两个磁盘文件,各自存放已安排好的若干字符(a1.dat中放abort;a2.dat中放boy)要求将两个文件合并,合并后任然保持有序(abboorty),结果存放在a3...
有两个磁盘文件,各自存放已安排好的若干字符(a1.dat中放abort;a2.dat中放boy)要求将两个文件合并,合并后任然保持有序(abboorty),结果存放在a3.dat中下面是程序:
#include "stdio.h"
main( )
{
FILE *in1,*in2,*out;
int i,j,n;
char q[10],t;
if((in1=fopen("a1.dat","r"))==NULL)
{
printf("cannot open infile\n");
exit(0);
}
if((in2=fopen("a2.dat","r"))==NULL)
{
printf("cannot open the infile\n");
exit(0);
}
if((out=fopen("a3.dat","w"))==NULL)
{
printf("cannot open the outfile\n");
exit(0);
}
i=0;
while(!feof(in1))
{
q[i]=fgetc(in1);i++;
}
i--;
while(!feof(in2))
{
q[i]=fgetc(in2);i++;
}
i--;
q[i]=NULL;
n=i;
for(i=0;i!=n;i++)
for(j=i;j!=n;i++)
if(q[i]>q[j])
{
t=q[i];q[i]=q[j];q[j]=t;
}
printf("%s",q);
for(i=0;q[i]!=NULL;i++)
fputc(q[i],out);
fclose(in1);
fclose(in2);
fclose(out);
}
有以下疑问:
1,运行结果发生错误,好像是访问地址发生冲突 ,结果如图案片:
2,个人感觉两个i--都是多余的,
while(!feof(in1))
{
q[i]=fgetc(in1);i++;
}
执行完以后,把abort读入q[i]中,此时i=5,不自减的话刚好从q[5]的位置读入boy,如果自减就是从q[4]的位置读入boy,这个时候不就是把abort最后一个字母覆盖了吗?
下一个i--也会导致null把boy最后一个字符覆盖,不知道对不对,求教
3,关于feof的问题,feof是判断是判断文件结束的,他是怎样实现这个判断的过程,比如说判断单个字符串结束,只需要找到"\0"就行,那这个呢,判断的标准是什么样的,网上看很多,还是迷迷糊糊的。
4,我的vs2005总出现找不到某个控件的问题,据说是由于fat32和fat16的兼容性问题,根据网上的建议,修改了以下,但是过段时间又是这样(具体什么控件忘记了),怎样才能彻底的解决这个问题,弄得我很烦 展开
#include "stdio.h"
main( )
{
FILE *in1,*in2,*out;
int i,j,n;
char q[10],t;
if((in1=fopen("a1.dat","r"))==NULL)
{
printf("cannot open infile\n");
exit(0);
}
if((in2=fopen("a2.dat","r"))==NULL)
{
printf("cannot open the infile\n");
exit(0);
}
if((out=fopen("a3.dat","w"))==NULL)
{
printf("cannot open the outfile\n");
exit(0);
}
i=0;
while(!feof(in1))
{
q[i]=fgetc(in1);i++;
}
i--;
while(!feof(in2))
{
q[i]=fgetc(in2);i++;
}
i--;
q[i]=NULL;
n=i;
for(i=0;i!=n;i++)
for(j=i;j!=n;i++)
if(q[i]>q[j])
{
t=q[i];q[i]=q[j];q[j]=t;
}
printf("%s",q);
for(i=0;q[i]!=NULL;i++)
fputc(q[i],out);
fclose(in1);
fclose(in2);
fclose(out);
}
有以下疑问:
1,运行结果发生错误,好像是访问地址发生冲突 ,结果如图案片:
2,个人感觉两个i--都是多余的,
while(!feof(in1))
{
q[i]=fgetc(in1);i++;
}
执行完以后,把abort读入q[i]中,此时i=5,不自减的话刚好从q[5]的位置读入boy,如果自减就是从q[4]的位置读入boy,这个时候不就是把abort最后一个字母覆盖了吗?
下一个i--也会导致null把boy最后一个字符覆盖,不知道对不对,求教
3,关于feof的问题,feof是判断是判断文件结束的,他是怎样实现这个判断的过程,比如说判断单个字符串结束,只需要找到"\0"就行,那这个呢,判断的标准是什么样的,网上看很多,还是迷迷糊糊的。
4,我的vs2005总出现找不到某个控件的问题,据说是由于fat32和fat16的兼容性问题,根据网上的建议,修改了以下,但是过段时间又是这样(具体什么控件忘记了),怎样才能彻底的解决这个问题,弄得我很烦 展开
展开全部
下面是我改正后的!
#include "stdio.h"
main( )
{
FILE *in1,*in2,*out;
int i,j,n;
char q[20],t;//数组改大一点
if((in1=fopen("a1.dat","r"))==NULL)
{
printf("cannot open infile\n");
exit(0);
}
if((in2=fopen("a2.dat","r"))==NULL)
{
printf("cannot open the infile\n");
exit(0);
}
if((out=fopen("a3.dat","w"))==NULL)
{
printf("cannot open the outfile\n");
exit(0);
}
i=0;
while(!feof(in1))
{
q[i]=fgetc(in1);i++;
}
//这儿本来有个i--,不需要
while(!feof(in2))
{
q[i]=fgetc(in2);i++;
}
//i--不需要
q[i]=0;//这儿原来是NULL,不对,只有指针才用NULL,这儿应该是0,注意,不是0字符
n=i;
for(i=0;i!=n;i++)
for(j=i;j!=n;j++)//这儿原来是i++应该是j++
if(q[i]>q[j])
{
t=q[i];q[i]=q[j];q[j]=t;
}
printf("%s",q);
for(i=0;q[i];i++)//这儿也改了一下,这儿用q[i]和用q[i]!=0是一样的!
fputc(q[i],out);
fclose(in1);
fclose(in2);
fclose(out);
}
#include "stdio.h"
main( )
{
FILE *in1,*in2,*out;
int i,j,n;
char q[20],t;//数组改大一点
if((in1=fopen("a1.dat","r"))==NULL)
{
printf("cannot open infile\n");
exit(0);
}
if((in2=fopen("a2.dat","r"))==NULL)
{
printf("cannot open the infile\n");
exit(0);
}
if((out=fopen("a3.dat","w"))==NULL)
{
printf("cannot open the outfile\n");
exit(0);
}
i=0;
while(!feof(in1))
{
q[i]=fgetc(in1);i++;
}
//这儿本来有个i--,不需要
while(!feof(in2))
{
q[i]=fgetc(in2);i++;
}
//i--不需要
q[i]=0;//这儿原来是NULL,不对,只有指针才用NULL,这儿应该是0,注意,不是0字符
n=i;
for(i=0;i!=n;i++)
for(j=i;j!=n;j++)//这儿原来是i++应该是j++
if(q[i]>q[j])
{
t=q[i];q[i]=q[j];q[j]=t;
}
printf("%s",q);
for(i=0;q[i];i++)//这儿也改了一下,这儿用q[i]和用q[i]!=0是一样的!
fputc(q[i],out);
fclose(in1);
fclose(in2);
fclose(out);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询