“&=”C错误中的操作
我有一个tam=1000的数组,我必须检查是否接收到所有元素“&=”C错误中的操作,c,pointers,bit-manipulation,C,Pointers,Bit Manipulation,我有一个tam=1000的数组,我必须检查是否接收到所有元素 bool ok = true; size_t i; size_t tam=1000; for (i = 0; i < tam; i++){ ok &= vector_obtener(vec_vol, i, &valor); if (i!=valor) //this if was something i added to check why it wasn't working.
bool ok = true;
size_t i;
size_t tam=1000;
for (i = 0; i < tam; i++){
ok &= vector_obtener(vec_vol, i, &valor);
if (i!=valor) //this if was something i added to check why it wasn't working.
printf("En i=%zu y valor=%i \n",i,valor);
ok &= (valor == i);
}
print_test("all good", ok);
以下是打印测试:
void print_test(char* name, bool result){
printf("%s: %s\n", name, result? "OK" : "ERROR");
}
编辑:确定添加。当进入打印测试时,ok应该为真
对不起,如果我不太清楚,英语不是我的母语。如果您不理解某些内容,我将尝试用另一种方式来解释。因为在循环结束时打印ok变量之前,您要更新ok变量2000次,所以很难说出错误发生的确切位置。要诊断问题,应在每次更新ok变量时检查其值
for (i = 0; i < tam; i++)
{
ok &= vector_obtener(vec_vol, i, &valor);
if ( !ok )
printf("vector_obtener failed at i=%zu\n", i);
ok &= (valor == i);
if ( !ok )
printf("En i=%zu y valor=%i \n",i,valor);
}
或
如果i==0,则会失败。如果你盯着代码看得太久,那么你似乎在试图确保数组的每个元素vec_vol都是用它的索引初始化的。如果此假设正确,则此代码应执行以下操作:
bool ok = true;
size_t i;
if(NULL != vec_vol)
{
for (i = 0; i < vec_vol->tam; i++)
{
if(vec_vol->datos[pos] != i)
{
ok = false;
break;
}
}
}
if(ok)
{
print_test("all good", ok);
}
如果我没有理解您代码的意图,请忽略这一点。到底是什么问题?有错误吗?如果是,它是什么?显示ok的声明及其初始化。如果我=valor正在检查数据中的位置是否与该位置中的数据值不同,我认为这种情况很少发生。如何初始化变量ok以及您希望用它检查什么if?Minor:printfEn i=%zu y valor=%i\n,i,valor;应该使用En i=%d y valor=%i\n如果*勇气归假;:如果*valor==0,则返回false,确定&=valor==i;:如果i==0,那么valor==0必须为false,所以在打印时ok总是false;。
if(!*valor)
return false;
ok &= (valor == i);
bool ok = true;
size_t i;
if(NULL != vec_vol)
{
for (i = 0; i < vec_vol->tam; i++)
{
if(vec_vol->datos[pos] != i)
{
ok = false;
break;
}
}
}
if(ok)
{
print_test("all good", ok);
}