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