这个编程错在哪里了?



```c
//打印100-200之间的素数
int ret(int a)
{
    int n;
    for (n = 2; n < a; n++)
    {
        if (0 == a % n)
            return 0;
    }
    return 1;
}
int main()
{
    int i;
    for (i = 101; i <= 200; i+=2)
    {
        if(ret(i)==1);
            printf("%d\t", i);
    }
    return 0;
}

//请问这个程序为什么把所有的数都打出来了?

```

第20行 if(ret(i)==1);
最后这里多了一个 “;”

如果解决,请采纳,感谢。

if(ret(i)==1); 分号删了

【以下回答由 GPT 生成】

这段C语言代码的错误在于if(ret(i) == 1);这行的分号;。 由于分号的存在,if语句被提前终止,导致后面的printf语句会被执行而不受if语句的控制。 所以无论ret(i)返回什么值,都会执行printf语句,从而导致所有的数字都被打印出来。

正确的代码应该是:

if(ret(i) == 1)
    printf("%d\t", i);

即去掉分号后的正确代码为:

int ret(int a)
{
    int n;
    for (n = 2; n < a; n++)
    {
        if (a % n == 0)
            return 0;
    }
    return 1;
}

int main()
{
    int i;
    for (i = 101; i <= 200; i += 2)
    {
        if(ret(i) == 1)
            printf("%d\t", i);
    }
    return 0;
}


【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^