C++ C编程,数组打印不正确

C++ C编程,数组打印不正确,c++,c,encryption,C++,C,Encryption,所以在课堂上,我们用素数做了一些加密/解密算法。我正在制作程序的第一部分。我试图让程序检查一个数字是否为素数。在此之后,我希望程序将该数字之前的所有素数存储在一个名为prime_array的数组中。我试图把结果打印在屏幕上。这不是我想的那样。稍后我将在解密更复杂的东西时使用它。只是想知道是否有人能看到我的代码的哪一部分导致了这些问题 代码: #include <stdio.h> int main() { int n; int pr

所以在课堂上,我们用素数做了一些加密/解密算法。我正在制作程序的第一部分。我试图让程序检查一个数字是否为素数。在此之后,我希望程序将该数字之前的所有素数存储在一个名为prime_array的数组中。我试图把结果打印在屏幕上。这不是我想的那样。稍后我将在解密更复杂的东西时使用它。只是想知道是否有人能看到我的代码的哪一部分导致了这些问题

代码:

  #include <stdio.h>

    int main()
    {
        int n;
        int prime;
        int prime_array[1000];
        int prime_answer;
        int j=0;

        printf("enter a number for n : ");
        scanf_s("%d", &n);   

        if (n % 2 == 1)
        {
            printf("Number is prime.");
            getchar();
            getchar();

            for (int i = 0; i <= n; i++)
            {
                if (n - 1 % 2 == 1)
                {
                    n--;
                    prime_array[j] = n;
                    j++;    
                }
                else
                {
                    // do nothing
                }    
            }    
        }
        else if (n % 2 == 0)
        {
            printf("Number is not prime.");
            getchar();
            getchar();

        }

        for (int k = 0; k<= 10; k++)
        {
            printf("\n\n %d",prime_array[k]);
            if (k == 10);
            {
                getchar();
                getchar();       
            }       
        }        
}

问题是这种情况-

if (n - 1 % 2 == 1)
此表达式被视为n-1%2==1,因为%的优先级高于-,因此,首先计算1%2。由于1%2为1,表达式变为n-1,所以条件在n为2之前不会为真,而不是您希望的那样

你需要这样写-

if ((n - 1) % 2 == 1)

无法完全理解您试图对底部的for循环执行的操作。嗯,n-1%2==1与n%2==0不是差不多吗?如果我们忽略消极的numbers@chux这将是类似的。哦,那个么若第一个条件为真,那个么其他部分不总是被执行吗?