关于memset函数的问题
遇到一个问题主要就是当我写memset(f,1,sizeof(int)*10)的时候事实上f[i]却置上了一个很大的数,将一改成0或-1,是正常的改成2,结果好像是改成1...
遇到一个问题 主要就是当我写memset(f,1,sizeof(int)*10)的时候 事实上 f[i]却置上了一个很大的数,将一改成0或-1,是正常的 改成2,结果好像是改成1是出现数的2倍,请问高手为什么?(我用vc6.0++编译的)
另外 这里 写sizeof(int)*10与写sizeof(f)有区别吗,他们都一样吗?
这里是源程序:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct mice{
int w,s,id;
}mouse[1002];
int cmp(const void *a, const void *b)
{
if ((*(struct mice *)a).w != (*(struct mice *)b).w)
return (*(struct mice *)b).w - (*(struct mice *)a).w;
else
return (*(struct mice *)a).s - (*(struct mice *)b).s;
}
int main(void)
{
int pre[1002],f[1002]/*(这里%%%%%%%%%%%)*/,i=0,j,max=1,ms,n;
while(1){
while(scanf("%d%d",&mouse[i].w,&mouse[i].s)!=EOF&&mouse[i].w)
{
mouse[i].id=i+1;
i++;
}
n=i;
qsort(mouse,n,sizeof(mouse[0]),cmp);
memset(pre,-1,sizeof(int)*n);
memset(f,2,sizeof(int)*n);//(这里***********)
for(i=0;i<n;i++)
{
printf("%d %d***\n",f[i],pre[i]);//(这里*************)
f[i]=1;
for(j=0;j<i;j++)
{
if(mouse[j].s<mouse[i].s&&mouse[j].w>mouse[i].w&&(f[j]+1)>f[i])
{
printf("%d %d\n",mouse[i].w,mouse[j].w);
f[i]=f[j]+1;
pre[i]=j;
}
}
if(f[i]>max)
{
max=f[i];
// printf("%d^^\n",max);
ms=i;
}
}
printf("%d\n",max);
while(pre[ms]!=-1)
{
printf("%d\n",mouse[ms].id);
ms=pre[ms];
}
printf("%d\n",mouse[ms].id);
}} 展开
另外 这里 写sizeof(int)*10与写sizeof(f)有区别吗,他们都一样吗?
这里是源程序:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct mice{
int w,s,id;
}mouse[1002];
int cmp(const void *a, const void *b)
{
if ((*(struct mice *)a).w != (*(struct mice *)b).w)
return (*(struct mice *)b).w - (*(struct mice *)a).w;
else
return (*(struct mice *)a).s - (*(struct mice *)b).s;
}
int main(void)
{
int pre[1002],f[1002]/*(这里%%%%%%%%%%%)*/,i=0,j,max=1,ms,n;
while(1){
while(scanf("%d%d",&mouse[i].w,&mouse[i].s)!=EOF&&mouse[i].w)
{
mouse[i].id=i+1;
i++;
}
n=i;
qsort(mouse,n,sizeof(mouse[0]),cmp);
memset(pre,-1,sizeof(int)*n);
memset(f,2,sizeof(int)*n);//(这里***********)
for(i=0;i<n;i++)
{
printf("%d %d***\n",f[i],pre[i]);//(这里*************)
f[i]=1;
for(j=0;j<i;j++)
{
if(mouse[j].s<mouse[i].s&&mouse[j].w>mouse[i].w&&(f[j]+1)>f[i])
{
printf("%d %d\n",mouse[i].w,mouse[j].w);
f[i]=f[j]+1;
pre[i]=j;
}
}
if(f[i]>max)
{
max=f[i];
// printf("%d^^\n",max);
ms=i;
}
}
printf("%d\n",max);
while(pre[ms]!=-1)
{
printf("%d\n",mouse[ms].id);
ms=pre[ms];
}
printf("%d\n",mouse[ms].id);
}} 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询