C语言中输入一个值,判断数组里是否有这个值,如果有将行和列输出...求解,谢谢大家!
#include<stdio.h>inta[2][3]={{4,1,5},{9,87,40}},(*p)[3],n,i,j;intmain(){printf("pleas...
#include<stdio.h>
int a[2][3]={{4,1,5},{9,87,40}},(*p)[3],n,i,j;
int main()
{
printf("please input a integer:\n");
scanf("%d",&n);
p=a;
for(i=o;i<2;i++)
flag=0;
for(j=0;j<3;j++)
{
if(*(*(p+i)+j)==n) flag=1;
if(flag==1)
printf("the crow and colum is:%3d,%3d\n",i,j);
break;
}
if(i>=2) printf("don't have\n"); //主要是这里判断问题;
return 0; //为啥最后输出的都会带上“don't have”???呢。
} 展开
int a[2][3]={{4,1,5},{9,87,40}},(*p)[3],n,i,j;
int main()
{
printf("please input a integer:\n");
scanf("%d",&n);
p=a;
for(i=o;i<2;i++)
flag=0;
for(j=0;j<3;j++)
{
if(*(*(p+i)+j)==n) flag=1;
if(flag==1)
printf("the crow and colum is:%3d,%3d\n",i,j);
break;
}
if(i>=2) printf("don't have\n"); //主要是这里判断问题;
return 0; //为啥最后输出的都会带上“don't have”???呢。
} 展开
5个回答
展开全部
if(i>=2)有问题,应该为if(i>2)
另外程序其他地方也有问题,最外层的for循环,请问你的大括号哪里去了?
正确程序应为
int main()
{
printf("please input a integer:\n");
scanf("%d",&n);
p=a;
for(i=0;i<2;i++)
{
flag=0;
for(j=0;j<3;j++)
{
if(*(*(p+i)+j)==n)
flag=1;
if(flag==1)
{
printf("the crow and colum is:%3d,%3d\n",i,j);
break;
}
}
}
if(i>2)
printf("don't have\n");
return 0;
}
更多追问追答
追问
为什么这里的判断写出:
if(i>2) 才正确呢?
追答
首先回答你的问题,假如数组里有你输入的整数,按照你的程序,是想打印,然后break,但是,这只是退出了内层的for循环,最外层的for还是会执行完,所以,即使你找到了输入的数,i的值还是会等于2,所以会打印“don't have”。
然后,我又看了一下你的程序,发现,其实改成大于2也是有问题的。因为当找不到你输入的整数时,便不会提示了,所以,最好是用flag来标识是否找到了。
int main()
{
printf("please input a integer:\n");
scanf("%d",&n);
flag=0;
p=a;
for(i=0;i<2;i++)
{
if (flag == 1)//如果已经找到,跳出外层循环
{
break;
}
for(j=0;j<3;j++)
{
if(*(*(p+i)+j)==n)
flag=1;
if(flag==1)
{
printf("the crow and colum is:%3d,%3d\n",i,j);
break;
}
}
}
if (flag != 1)
{
printf("don't have\n");
}
return 0;
}
展开全部
#include<stdio.h>
int a[2][3]={{4,1,5},{9,87,40}},(*p)[3],n,i,j,flag;
int main()
{
printf("please input a integer:\n");
scanf("%d",&n);
p=a;
for(i=0;i<2;i++)
{
flag=0;
for(j=0;j<3;j++)
{
if(*(*(p+i)+j)==n)
flag=1;
if(flag==1)
{
printf("the crow and colum is:%3d,%3d\n",i+1,j+1);
break;
}
}
if(flag)
break;
}
if(i>=2)
printf("don't have\n");
return 0;
}
int a[2][3]={{4,1,5},{9,87,40}},(*p)[3],n,i,j,flag;
int main()
{
printf("please input a integer:\n");
scanf("%d",&n);
p=a;
for(i=0;i<2;i++)
{
flag=0;
for(j=0;j<3;j++)
{
if(*(*(p+i)+j)==n)
flag=1;
if(flag==1)
{
printf("the crow and colum is:%3d,%3d\n",i+1,j+1);
break;
}
}
if(flag)
break;
}
if(i>=2)
printf("don't have\n");
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
括号问题,你的for没有嵌套进去
for(i=0;i<2;i++)//这里是0,你写成字母0了
{ //少了这个括号,你就只运行一句flag=0
flag=0;
for(j=0;j<3;j++)
{
//这里可以写P[i][j]==n,//数组和指针是一样的,数组的首地址就是指针p,不过我看你是故意的,不然直接 用a[][]了
if(*(*(p+i)+j)==n) flag=1;
if(flag==1)
printf("the crow and colum is:%3d,%3d\n",i,j);
break;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
for(i=o;i<2;i++) 这里是 i=o 还是 i=0 ? 一个是字母o 一个是数字0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-01-20
展开全部
因为,如果已经找到了的话,就会在循环的break语句里面提前退出,这样i一定比2小。
所以如果i不小于2的话,就已经把所有的元素都遍历了一边。
所以如果i不小于2的话,就已经把所有的元素都遍历了一边。
追问
大师,能说的明白点不,有点不理解
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询