鱼C论坛

 找回密码
 立即注册
查看: 1601|回复: 2

这个break语句放这为啥会报错?求大佬解释一下谢谢!!

[复制链接]
发表于 2023-5-24 11:53:56 | 显示全部楼层 |阅读模式

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

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

x
int main(void)
{
    long long i,num;
    _Bool flag=1;

    printf("请输入一个数:\n");
    scanf("%11d",&num);

    for(i=2;i<=num/2;i++);
    {
        if(num%i==0)
        {
            flag=0;
            break;        //<------------------------------------------------------------在这  报错:main.c|33|error: break statement not within loop or switch|
        }

    }

    if(flag)
    {
        printf("%-11d是素数!\n",num);
    }
    else
    {
        printf("%-11d不是素数!\n",num);
    }

    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-24 12:02:45 | 显示全部楼层
你的代码中的错误是在for循环语句的结束处。你使用了分号( ; ),这会导致循环主体为空。因此, break 语句实际上并不在任何循环或开关(switch)语句内部,这就是为什么你收到这个错误信息。

正确的代码应该是这样的:
int main(void)
{
    long long i,num;
    _Bool flag=1;

    printf("请输入一个数:\n");
    scanf("%11lld",&num);

    for(i=2;i<=num/2;i++)   // 删除这里的分号
    {
        if(num%i==0)
        {
            flag=0;
            break; 
        }

    }

    if(flag)
    {
        printf("%-11lld是素数!\n",num);  // 注意这里也要改为 %lld
    }
    else
    {
        printf("%-11lld不是素数!\n",num);  // 注意这里也要改为 %lld
    }

    return 0;
}
注意,你在printf和scanf中的格式说明符应该与变量的类型相匹配。在你的代码中, num 的类型是 long long ,因此你应该使用 %lld ,而不是 %d 。在C语言中, %d 用于 int 类型,而 %lld 用于 long long int 类型。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 1

使用道具 举报

发表于 2023-5-24 20:16:30 | 显示全部楼层
本帖最后由 sfqxx 于 2023-5-24 20:20 编辑

这是因为在 for 循环的末尾加了一个分号,导致 for 循环成为了一个空循环,而紧接着的 break 语句实际上并不在任何循环或 switch 语句中,因此才会编译错误。

具体来说,在 for 循环中,分号一般用来分隔三个部分,即循环变量的初始化、循环条件和循环变量的更新操作。而在 for 循环的第一个分号后面放置了一个空语句(即什么也没做的语句),使得循环体为空,因此后面的 break 语句也变成了独立的语句,不再属于任何循环或 switch 语句。

要解决这个问题,只需要去掉 for 循环语句末尾的分号即可,代码修改如下:
for (i = 2; i <= num / 2; i++) {
    if (num % i == 0) {
        flag = 0;
        break; 
    }
}

注意到我还把循环变量的更新操作由原来的分号改成了 i++,这样才能让程序正确执行循环体。

还有应该用%lld
        if(flag)
        {
                printf("%-11lld是素数!\n",num);
        }
        else
        {
                printf("%-11lld不是素数!\n",num);
        }


有用请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-7-9 16:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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