在C中将布尔数组的元素更改为false

在C中将布尔数组的元素更改为false,c,boolean,C,Boolean,我正在进行一个Euler挑战项目,以找到一个数的所有素因子。我正在使用一个初始化为true的布尔数组,然后通过将bool值更改为false来删除倍数。这是Eratosthenes的筛子,但我不知道如何将元素保存为false。我可以让它列出非素数或假数,但当我试图打印出素数或真数时,它会打印出每个数字。如果有人能告诉我我做错了什么,我将不胜感激 我的代码: #include <stdio.h> #include <stdlib.h> #include <stdbool

我正在进行一个Euler挑战项目,以找到一个数的所有素因子。我正在使用一个初始化为true的布尔数组,然后通过将bool值更改为false来删除倍数。这是Eratosthenes的筛子,但我不知道如何将元素保存为false。我可以让它列出非素数或假数,但当我试图打印出素数或真数时,它会打印出每个数字。如果有人能告诉我我做错了什么,我将不胜感激

我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>


void hope(int n, bool Ar[n])
{
    for (int i = 2; i <= n; ++i)
    {
        if (Ar[i] = (true))
        {
            for (int j = i*i; j<=n; j = i+j)
            {
                Ar[j] = false;
            }
        }
    }
    for (int i = 2; i <= n; ++i)
    {
        if (Ar[i] = (true))
        {
            printf("\ntrue value: %d", i);
        }
    }

}
int main ()
{
    int n = 15;
    bool Ar[15] = {true};
    hope(n, Ar);

    return 0;
}

您正在赋值,而不是比较它。换成

if (Ar[i] == (true))
.
.
而且,正是这种错误需要一些东西。请看第一期:

bool Ar[15] = {true};
仅将数组中的第一个元素初始化为true;其余元素将初始化为false。但是,您打印每个数字的原因是

if (Ar[i] = (true))
将true赋值给Ar[i],而不是执行比较。你需要把它改成

if ( Ar[i] == true ) 
或者,更好的是:

if ( Ar[i] )
两个主要问题:

正如其他人所说,条件是错误的,实际上它为数组元素指定了true,并且条件始终为true


对于int i=2;i存在多个问题:


对于int i=2;i=用于分配任务用于相等比较。如果Ar[i]=true->if Ar[i]==true或更好:如果Ar[i]也是,bool Ar[15]={true}只初始化数组的第一个成员。哦,真的吗?非常感谢!您是否打开了警告?如果Ar[i]=true。。。应该给你一个警告。发现了数组边界问题。然而,与使用i#define COUNT_OF(_Array) (sizeof(_Array) / sizeof(_Array[0])) int main () { //int n = 15; bool Ar[15] = { [0 ... COUNT_OF(Ar)-1] = true}; hope(COUNT_OF(Ar), Ar); return 0; }