注册 登录
编程论坛 C语言论坛

求助帖,for循环判断后不执行for下{}中的语句直接开始循环,循环完才往{}中走

yppph 发布于 2022-11-09 01:48, 1022 次点击
#include <stdio.h>
#include <math.h>
int is_prime(int n)
{
    int j = 0;
    for (j = 2; j <= sqrt(n); j++)
    {
        if (n % j == 0)
            return 0;
    }
    return 1;
}
int main()
{
    int i = 0;
    for (i = 1; i<=200; i++);//程序在这个位置直接开始循环
    {
        if (is_prime(i) == 1)//进到这个位置直接是201了,程序没有任何错误和警告,目前看来就是程序没有吧for下{}中的内容看到for循环中的一部分,但我不知道为什么
            printf("%d", i);
    }
    return 0;
}
7 回复
#2
小白级的小黑2022-11-09 07:43
要不加个if语句,if里嵌个continue
#3
rjsp2022-11-09 08:21
for (i = 1; i<=200; i++);//程序在这个位置直接开始循环
for (i = 1; i<=200; i++) //程序在这个位置直接开始循环
#4
rjsp2022-11-09 08:34
程序代码:
#include <stdio.h>
#include <stdbool.h>

bool is_prime( int n )
{
    if( n == 2 )
        return true;
    if( n<2 || n%2==0 )
        return false;

    for( int i=3; i<=n/i; i+=2 )
    {
        if( n%i == 0 )
            return false;
    }
    return true;
}

int main( void )
{
    for( int i=0; i!=201; ++i )
    {
        if( is_prime(i) )
            printf( "%d\n", i );
    }
}
#5
yppph2022-11-09 13:49
回复 楼主 yppph
找到问题了了就是for()后多了一个分号才导致的。如果加continue也没用吧,那个分号不去除的话循环不结束根本不进if语句呀,害。我自己写完了运行不出来,我还去csdn复制了一篇运行也是一样的结果,就没自信看哈哈
#6
yppph2022-11-09 13:49
回复 2楼 小白级的小黑
谢谢大佬,怪自己不细心。
#7
yppph2022-11-09 14:07
回复 4楼 rjsp
明白了大佬,还有几个问题请教您。在实际中像您这样写的话会比我那个运算速度或者其他方面优化一点吗,虽然i+=2省了一部分事儿,但是前面也多了一个判断的部分。if (is_prime(i)),在函数中我用0代替false,用1代替ture也能输出。在实际上会有区别吗
#8
小白级的小黑2022-11-09 15:25
回复 7楼 yppph
在C语言中|非0即真|。用负数,返回的也是‘真’
1