C编程:使用关系运算符-小于vs小于等于

C编程:使用关系运算符-小于vs小于等于,c,for-loop,relational-operators,C,For Loop,Relational Operators,我正在解决一个教科书上的问题,我在下面写了一段代码,以识别用户输入的正数下面的所有素数: #include <stdio.h> int main(void) { int j, input, notaprime; scanf_s("%d", &input); printf("List of prime numbers:\n"); for (; input >= 2; input--) { notaprime =

我正在解决一个教科书上的问题,我在下面写了一段代码,以识别用户输入的正数下面的所有素数:

#include <stdio.h>

int main(void)
{
    int j, input, notaprime;

    scanf_s("%d", &input);

    printf("List of prime numbers:\n");
    for (; input >= 2; input--)
    {
        notaprime = 0;
        for (j = 2; j < input; j++) //OR (for(j = 2; j*j <= input; j++)
        {
            if ((input % j) == 0)
            {
                notaprime = 1;
                break;
            }
            else
            {
                ;
            }
        }

        if (notaprime)
        {
            ;
        }
        else
        {
            printf("%d\n", input);
        }
    }

    return 0;
}
但是,当我将内部for循环中的关系运算符从更改为:

        for (j = 2; j < input; j++)
现在,素数不再打印,但我想不出任何逻辑原因。现在,我的大脑在思考为什么这应该是有效的可能原因时受伤了。请帮忙。谢谢

我在codeblocks 16.01和VisualStudio Community 2015上试过这个。输出相同。

代码中存在逻辑错误 我们知道素数是一个被1或它本身除的数

当您对(j=2;j操作时,则检查
input
以下所有数字是否正确


但是当你为(j=2;j)做
时,你在学校学到了关于小于等于的区别的什么?我喜欢
else{;}
。我给你的提示是,如果你从
j=1
开始,你会有完全相同的问题,但从另一个角度来看。看看素数的定义。如果
j==input
input%j==0
是真的。
j*j这将是一个很好的时间,让你学习使用调试器逐步完成你的任务r代码,这样你就可以准确地看到发生了什么。哇,我怎么能看不到呢。我不知道我这么笨。谢谢!
        for (j = 2; j < input; j++)
        for (j = 2; j <= input; j++) //Changed from less than to less than equals
30
List of prime numbers:
Press any key to continue . . .