当前位置: 代码迷 >> C语言 >> 编译能通过,运行后却得不到想要的答案..
  详细解决方案

编译能通过,运行后却得不到想要的答案..

热度:53   发布时间:2006-06-13 11:49:54.0
还请斑竹说下一个问题就是,两个FOR嵌套使用时,在第2个FOR里面使用break时,到底是第2个for的循环后执行第1个for的循环,,还是跳出两个循环继续下个语句~~
----------------解决方案--------------------------------------------------------
#include<stdio.h>
void main()
{
int a[9];
int i,j,k=0;
for(i=0;i<9;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<8;i++)
{
for(j=i+1;j<9;j++)
{
if(a[i]==a[j])
{
k++;
}
}
}
if(i==8&&k==0)
{
k=0;
printf("%d",k);
}
else
{
printf("k=1");
}
}

----------------解决方案--------------------------------------------------------
以下是引用fgftghth在2006-6-13 11:49:54的发言:
还请斑竹说下一个问题就是,两个FOR嵌套使用时,在第2个FOR里面使用break时,到底是第2个for的循环后执行第1个for的循环,,还是跳出两个循环继续下个语句~~

在第2个FOR(内循环)里面使用break,则结束内循环、继续执行第1个FOR(外循环)。不能一口气从深层循环中完全解脱出来。如果不忌讳用goto语句,则下列代码效率更高:
#include<stdio.h>
void main()
{
int a[9];
int i,j,k=1;
for(i=0;i<9;i++)
scanf("%d",&a[i]);
for(i=0;i<8;i++)
for(j=i+1;j<9;j++)
if(a[i]==a[j]){k=0;goto finish;}
finish:
printf("%d",k);
}


----------------解决方案--------------------------------------------------------
里边的那个BREAK只是结束里边那个FOR,对外边的不起作用,要结束整个需要加2个break
----------------解决方案--------------------------------------------------------


#include<stdio.h>
void main()
{
int a[9];
int i,j,k;
for(i=0;i<9;i++) scanf("%d",&a[i]);
for(i=0;i<8;i++)
{ for(j=i+1;j<9;j++)
{ if(a[i]==a[j])
{k=0;break;}
else k=1;
}
if(k==0)
break;
}

printf("%d\n",k);
}
看看这个,应该可以哦!!!!!!!


----------------解决方案--------------------------------------------------------
回复:(huangtaomvp)#include<stdio.h>void m...
楼上正确示意了break的“二级跳”,谢谢。

----------------解决方案--------------------------------------------------------
以下是引用fgftghth在2006-6-13 10:57:46的发言:
#include<stdio.h>
void main()
{
int a[9];
int i,j,k;
for(i=0;i<9;i++) scanf("%d",a[i]);
for(i=0;i<8;i++)
for(j=i+1;j<9;j++)
{ if(a[i]==a[j]) {k=0;break;}
else k=1;
}
printf("%d",k);
}


我的意思是想输进9个一位数,判断这9个数是不是都不相同,相同就输出0,不同就输出1
可运行时却得不到正确的答案呢~~
最后输出有一个什么NULL POINTER ASSIGMENT~~~
谁知道是哪里出问题了,跟我说一声好吗~~谢谢您了~~

这样就可以了!
int main()
{
int target;
int a[9];
for(int i=0;i<9;i++)
{
int ppp;
scanf("%d",&ppp);
a[i] =ppp;
}
target =a[0];
for(int i=0;i<9;i++)
{
if(target!=a[i])
{
printf("有不同的!\n");
return 0;
}
}
printf("都相同啊!\n");
return 0;
}

你的那个break是跳离所有的循环
所有的循环都结束


----------------解决方案--------------------------------------------------------
回复:(编程女孩)以下是引用fgftghth在2006-6-13 10...
以下是引用编程女孩在2006-6-13 18:44:05的发言:

这样就可以了!
int main()
{
int target;
int a[9];
for(int i=0;i<9;i++)
{
int ppp;
scanf("%d",&ppp);
a[i] =ppp;
}
target =a[0];
for(int i=0;i<9;i++) //????????
{
if(target!=a[i])
{
printf("有不同的!\n");
return 0;
}
}
printf("都相同啊!\n");
return 0;
}

你的那个break是跳离所有的循环
所有的循环都结束 ?!别乱说一气


----------------解决方案--------------------------------------------------------

  相关解决方案