鱼C论坛

 找回密码
 立即注册
查看: 3037|回复: 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;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

正确的代码应该是这样的:

  1. int main(void)
  2. {
  3.     long long i,num;
  4.     _Bool flag=1;

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

  7.     for(i=2;i<=num/2;i++)   // 删除这里的分号
  8.     {
  9.         if(num%i==0)
  10.         {
  11.             flag=0;
  12.             break;
  13.         }

  14.     }

  15.     if(flag)
  16.     {
  17.         printf("%-11lld是素数!\n",num);  // 注意这里也要改为 %lld
  18.     }
  19.     else
  20.     {
  21.         printf("%-11lld不是素数!\n",num);  // 注意这里也要改为 %lld
  22.     }

  23.     return 0;
  24. }
复制代码

注意,你在printf和scanf中的格式说明符应该与变量的类型相匹配。在你的代码中, num 的类型是 long long ,因此你应该使用 %lld ,而不是 %d 。在C语言中, %d 用于 int 类型,而 %lld 用于 long long int 类型。
小甲鱼最新课程 -> https://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 循环语句末尾的分号即可,代码修改如下:
  1. for (i = 2; i <= num / 2; i++) {
  2.     if (num % i == 0) {
  3.         flag = 0;
  4.         break;
  5.     }
  6. }
复制代码


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

还有应该用%lld
  1.         if(flag)
  2.         {
  3.                 printf("%-11lld是素数!\n",num);
  4.         }
  5.         else
  6.         {
  7.                 printf("%-11lld不是素数!\n",num);
  8.         }
复制代码



有用请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-9 20:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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