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”???呢。
}
展开
 我来答
ttyyuu20111201
2014-01-20 · TA获得超过1362个赞
知道小有建树答主
回答量:278
采纳率:0%
帮助的人:279万
展开全部

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;    
 
}
opfanjn
2014-01-20 · 超过27用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:66.1万
展开全部
#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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
水焱新火
2014-01-20 · TA获得超过256个赞
知道小有建树答主
回答量:144
采纳率:100%
帮助的人:128万
展开全部

括号问题,你的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;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
琴风夜扬
2014-01-20
知道答主
回答量:49
采纳率:0%
帮助的人:27.5万
展开全部
for(i=o;i<2;i++) 这里是 i=o 还是 i=0 ? 一个是字母o 一个是数字0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-01-20
展开全部
因为,如果已经找到了的话,就会在循环的break语句里面提前退出,这样i一定比2小。
所以如果i不小于2的话,就已经把所有的元素都遍历了一边。
追问
大师,能说的明白点不,有点不理解
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式