鱼C论坛

 找回密码
 立即注册
查看: 2124|回复: 6

[已解决]为什么我的循环用BREAK跳出不是跳出整个循环

[复制链接]
发表于 2022-8-3 21:16:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
从键盘输入的10个整数中,找到第一个能被7整除的数,若找到打印此数后退出循环,若未找到则打印“未找到此数”
#include<stdio.h>
#define N 3
int main(){
        int a[N];
        int i;
        for(i=0;i<N;i++){
                scanf("%d",&a[i]);
        }
        for(i=0;i<N;i++){
                if(a[i]%7==0){
                  printf("%d\n",a[i]);
                  break;
            }
            else
                printf("\n未找到此数\n");
        }
        return 0;
}
要如何修改,
我是这样改的,
#include<stdio.h>
#define N 3
int main(){
        int a[N];
        int i;
        for(i=0;i<N;i++){
                scanf("%d",&a[i]);
        }
        for(i=0;i<N;i++){
                if(a[i]%7==0){
                  printf("%d\n",a[i]);
                  return 0;
            }
        }
        printf("\n未找到此数\n");
        return 0;
}
但是我知道第一个错在break循环跳出不对,但是我不知道如何修改,想问下如何修改才能正确得出结果?
最佳答案
2022-8-3 22:45:59
#include <stdio.h>

#define N 10

int main(void)
{
        int a[N] , i                                      ;
        for(i = 0 ; i < N ; i ++) scanf("%d", & a[i])     ;
        for(i = 0 ; i < N ; i ++) if(a[i] % 7 == 0) break ;
        if(i < N) printf("%d\n" , a[i])                   ; // 如果找到,必然不能完成循环,一定会满足条件 i < N
        else printf("未找到此数\n")                       ;
} 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-3 21:23:04 | 显示全部楼层
本帖最后由 xuzitong 于 2022-8-3 21:24 编辑

首先,第一个程序是有错误的,但是错误不只是你修改的地方。还有#define N 3。题目要求键盘输入10个数,你这里只有3个。其次,你可以加一个标志,例如int find = 0; 然后if里面找到了, find = 1; 最后根据find是否等于1来printf,这个能够解决你的打印问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-3 21:23:34 | 显示全部楼层
首先,你确定是十个数??
定义一个BOOL变量find=0
若找到,退出并将find=1
循环后,find如果还是0,就输出没找到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-3 22:05:42 | 显示全部楼层
xuzitong 发表于 2022-8-3 21:23
首先,第一个程序是有错误的,但是错误不只是你修改的地方。还有#define N 3。题目要求键盘输入10个数,你 ...

那个N设置成3是方便我验证程序是否正确,为啥我这个break不能跳出全部循环,知能跳出当前循环?如何才能跳出全部循环,是只有设置中间变量才能跳出嘛?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-3 22:06:25 | 显示全部楼层
aaron0919 发表于 2022-8-3 21:23
首先,你确定是十个数??
定义一个BOOL变量find=0
若找到,退出并将find=1

那个N设置成3是方便我验证程序是否正确,为啥我这个break不能跳出全部循环,知能跳出当前循环?如何才能跳出全部循环,是只有设置中间变量才能跳出嘛?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-3 22:20:40 | 显示全部楼层
break 确实只作用于最近一层循环;设置中间变量是可行的方法,另外像您改的那样直接 return 显然也是可行的,也可以用 goto 语句来跳出多层循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-3 22:45:59 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>

#define N 10

int main(void)
{
        int a[N] , i                                      ;
        for(i = 0 ; i < N ; i ++) scanf("%d", & a[i])     ;
        for(i = 0 ; i < N ; i ++) if(a[i] % 7 == 0) break ;
        if(i < N) printf("%d\n" , a[i])                   ; // 如果找到,必然不能完成循环,一定会满足条件 i < N
        else printf("未找到此数\n")                       ;
} 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-21 13:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表