这个break语句放这为啥会报错?求大佬解释一下谢谢!!
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;
}
你的代码中的错误是在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 类型。 本帖最后由 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);
}
有用请设置最佳答案
页:
[1]