搜索
查看: 1748|回复: 18
打印 上一主题 下一主题

break跳出循环的位置问题

[复制链接]
跳转到指定楼层
楼主
发表于 2015-8-17 17:53:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
先贴上完整代码
#include <stdio.h>

#include <stdlib.h>
int main()
{
        int i,a,b,c,d,n; //多了个变量n来让while中断
    puts("请输入三位数:");
    scanf("%d",&i);
        while(n=1)
        {
                        if(i<100 || i>999)
                        {
                                puts("请输入三位数:");
                                scanf("%d",&i);
                        }
                                else
                  {
                    n=0;//当i符合条件时 n被赋值为0
                    break;/*并跳出内循环返回外循环开头  n=0为假
                    跳出外循环结束*/
                  }
         }
    a=i%100%10;//到这里执行计算
    b=i%100/10;
    c=i/100;
    d=a+b+c;
    printf("和是:%d\n",d);

        system("pause");
    return 0;
}
下面上截图方便标注    我的意思是break在循环嵌套中跳出内循环然后在哪里去了?
求大神详细解答




QQ截图20150817175317.png (142.78 KB, 下载次数: 34)

QQ截图20150817175317.png

最佳答案

查看完整内容

楼上居然一个人也没有注意到{:soso_e127:} [mw_shl_code=c,true]while(n=1)[/mw_shl_code] 判断相等用==不是=,改成==之后,后面的n=0和break留下哪一个效果都是一样的
沙发
发表于 2015-8-17 17:53:31 | 只看该作者
本帖最后由 981013 于 2015-8-18 19:15 编辑

楼上居然一个人也没有注意到{:soso_e127:}
[mw_shl_code=c,true]while(n=1)[/mw_shl_code]
判断相等用==不是=,改成==之后,后面的n=0和break留下哪一个效果都是一样的
板凳
发表于 2015-8-17 18:08:38 | 只看该作者
那个break;是进行下面的运算跳出while(n=1)的
地板
发表于 2015-8-17 18:52:28 | 只看该作者
跳出while(n=1)并且不会再回到while开头,while(n=1)循环已经结束了,
如果你有在用其它编译器的话可以试试用断点的功能,会看得很清楚
5#
 楼主| 发表于 2015-8-17 22:07:59 | 只看该作者
小榛鼠 发表于 2015-8-17 18:52
跳出while(n=1)并且不会再回到while开头,while(n=1)循环已经结束了,
如果你有在用其它编译器的话可以试 ...

我的意思是图片

QQ截图20150817220756.png (144.66 KB, 下载次数: 33)

QQ截图20150817220756.png
6#
发表于 2015-8-17 23:22:53 | 只看该作者
Dear 发表于 2015-8-17 22:07
我的意思是图片

抱歉else{n=0;break;}这句完全是没必要的,只要留下break就够了,
你试试把n=0改成n=1也完全没影响,当时不知道为什么加上去了,非常抱歉
7#
 楼主| 发表于 2015-8-18 09:03:05 | 只看该作者
小榛鼠 发表于 2015-8-17 23:22
抱歉else{n=0;break;}这句完全是没必要的,只要留下break就够了,
你试试把n=0改成n=1也完全没影响,当 ...

哦  谢谢  我把n=0删了  运行也一样     
8#
发表于 2015-8-18 17:26:14 | 只看该作者
如果是{n=0;break;},程序执行break后跳出while()语句,所以是break停止了while()语句。
9#
 楼主| 发表于 2015-8-19 09:25:22 | 只看该作者
981013 发表于 2015-8-17 17:53
楼上居然一个人也没有注意到

判断相等用== ...

一直以来都没注意到                               感谢

点评

我和你一样。  发表于 2016-8-18 22:50
10#
 楼主| 发表于 2015-8-19 09:44:20 | 只看该作者
981013 发表于 2015-8-17 17:53
楼上居然一个人也没有注意到

判断相等用== ...

我改成了while(n==1)  去掉了break      留下了else n=0;
但输入的不是3位数仍然输出了一个错误的结果
下面是代码和运行结果

QQ截图20150819094244.png (157.95 KB, 下载次数: 37)

QQ截图20150819094244.png

QQ截图20150819094410.png (6.75 KB, 下载次数: 28)

QQ截图20150819094410.png
11#
发表于 2015-8-19 10:05:34 | 只看该作者
Dear 发表于 2015-8-19 09:44
我改成了while(n==1)  去掉了break      留下了else n=0;
但输入的不是3位数仍然输出了一个错误的结果
...

n要初始化为1
12#
发表于 2015-8-19 10:06:13 | 只看该作者
本帖最后由 981013 于 2015-8-19 10:08 编辑
Dear 发表于 2015-8-19 09:44
我改成了while(n==1)  去掉了break      留下了else n=0;
但输入的不是3位数仍然输出了一个错误的结果
...

像这样:[mw_shl_code=c,true]#include <stdio.h>
#include <stdlib.h>
int main()
{
    int i,a,b,c,d,n; //多了个变量n来让while中断
    puts("请输入三位数:");
    scanf("%d",&i);
    n=1;//初始化操作
    while(n==1)
    {
        if(i<100 || i>999)
        {
            puts("请输入三位数:");
            scanf("%d",&i);
        }
        else
        {
            n=0;//当i符合条件时 n被赋值为0
        }
    }
    a=i%100%10;//到这里执行计算
    b=i%100/10;
    c=i/100;
    d=a+b+c;
    printf("和是:%d\n",d);
    system("pause");
    return 0;
}[/mw_shl_code]
13#
发表于 2015-8-19 10:06:32 | 只看该作者
Dear 发表于 2015-8-19 09:44
我改成了while(n==1)  去掉了break      留下了else n=0;
但输入的不是3位数仍然输出了一个错误的结果
...

n要初始化为1
14#
 楼主| 发表于 2015-8-19 10:11:06 | 只看该作者

                              谢谢
15#
发表于 2015-8-19 12:35:17 | 只看该作者
12+3+4=19;
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表