关于for循环break跳出的问题
最近看 谭浩强老师的 程序如下,有个问题想请教:#include<stdio.h>
main()
{
int i,j,p,q,s,n,a={127,3,6,28,54,68,87,105,162,18};
for(i=0;i<10;i++)
{ p=i;q=a;
for(j=i+1;j<10;j++)
if(q<a) {p=j;q=a;}
if(p!=i)
{
s=a;
a=a;
a=s;
}
printf("%d ",a);
}
printf("\ninput number:\n");
scanf("%d",&n);
for(i=0;i<10;i++)
if(n>a)
{for(s=9;s>=i;s--) a=a;break;} //此处为什么,要用break跳出,
a=n;
for(i=0;i<=10;i++)
printf("%d ",a);
printf("\n");
}
//请教一下各位,备注部分里面有break跳出循环,既然跳出循环了,那么又是如何将数组 依次向后移动一位的。执行的顺序没搞懂,不太理解!
就是没想通,既然在对比时进行for循环,依次将数组向后移,为什么移一位后,就break跳出了,到上个for中的if(n>a)不就是i越来越大了,再把n赋予a,越看越不对,所以问一下,备注部分的break是否是在for(s=9;s>=i,s--) a=a;执行循环完成之后再执行的break呢?我是初学者,有点看不懂了 又是谭老师的教材,他把你带偏了
提问题之前请先把代码格式化好,就算你看着这样的代码没什么感觉
那你也得考虑给你回答问题的我们
你觉得我们看到这样的代码是什么样的感觉吗?
括号有点乱呀
但是那个break是在for(s=9;s>=i,s--) a=a;执行完了以后执行的
for(s=9;s>=i,s--) a=a;//注意这里的分号,这段代码相当于
for(s=9;s>=i,s--)
{
a=a;
}
break;//这个break是针对外面的for的,这应该是一个排序,然后插入n的程序
没有{}来声明代码块的话,for语句就只对紧跟在他后面的语句起作用。
在c语言里{}外的语句会把{}里面的语句当作一句代码来看待
for 循环完了再 break 的 本帖最后由 柿子饼同学 于 2022-8-9 10:43 编辑
看看别的吧 qwq
这代码太阴间了
帮你改了 排版 , 以后照着别人的代码写 , 不要再这样写了{:10_266:}
你这个主要问题是那个 for 循环如果没加大括号就只执行最近的一个语句
即使有语句在它下面也不会执行
另外 , 你的 main 的 int 没加 , 后面 return 0; 没加
建议以后看到循环就加大括号 , 至少清楚一点
千万不要 不要 不要 这么写代码了
#include<stdio.h>
int main(){
int i, j, p, q, s, n;
int a = {127, 3, 6, 28, 54, 68, 87, 105, 162, 18};
for(i = 0; i < 10; i++){
p = i;
q = a;
for(j = i+1; j < 10; j++){
if(q < a){
p = j;
q = a;
}
}
if(p != i){
s = a;
a = a;
a = s;
}
printf("%d ",a);
}
printf("\ninput number:\n");
scanf("%d", &n);
for(i = 0; i < 10; i++){
if(n > a){
for(s = 9; s >= i; s--){
a = a;
}
break; // 你现在知道为什么了吧
}
}
a = n;
for(i = 0; i <= 10; i++){
printf("%d ", a);
}
printf("\n");
return 0;
} 感谢各位大侠,因为教材是这样写的,所以就原样复制下来了,以后会排版的 ,现在才明白,原来 在for循环结束之前;是单独一个,我总把循环体当成for的一部分,理所当然就break跳出了。谢谢各位的解答!{:5_95:} wjs3721 发表于 2022-8-9 12:10
感谢各位大侠,因为教材是这样写的,所以就原样复制下来了,以后会排版的 ,现在才明白,原来 在for循环 ...
如果问题解决了请选一个最满意答案设为最佳答案,谢谢
页:
[1]