如何在C中的布尔表达式中计算不同长度的数组?

时间:2014-05-28 12:42:00

标签: c

我的问题与已经问过的here非常相似。

但是,从文件中读取数组的长度(和输入)。 我如何评估我的示例中的布尔表达式?

fread(length, 4, 1, file);
array= calloc(length, sizeof(int));
fread(array, 4, length, file);

b = 7;

// I want to compare b with every entry in array
if(b==array[0]||b==array[1]||b==array[2]||...)    
  // do something   
end

2 个答案:

答案 0 :(得分:2)

假设类型匹配,并且没有要处理的字节序问题,您应该能够循环:

bool array_is_b = true;
for(size_t i = 0; i < length && array_is_b; ++i)
{
  array_is_b = array[i] == b;
}

循环结束后,如果每个元素等于array_is_b,则trueb

这是尝试取消明确的分配,可能更快:

bool array_is_self(const int *array, size_t length, int b)
{
  for(size_t i = 0; i < length; ++i)
  {
    if(array[i] != b)
      return false;
  }
  return true;
}

这会将操作重新排列到一个函数中,以便它可以使用return而不是单独的变量来跟踪状态。只要循环正在运行,所有i之前的元素都等于b。我假设数组类型为int

答案 1 :(得分:1)

for循环就在你的答案中。

for(i = 0 ; i < length ; i++)
{
    if(b == array[i])
    {
       //do something//
    }
}

顺便说一下,你的代码有问题。文本文件由字节组成 - 每个字符都是一个字节意味着它在类型char中被读取。如果array是一个整数数组(它看起来像),那么只有字符的ASCII值会被读入数组(在google中查找ASCII以获取更多信息,但基本上它是一个0到255之间的值,表示字符)。即使您的文本文件包含&#34;数字&#34;它被读作字符所以基本上如果你使用fread()你会读取字符但是fscanf()你可以确定输入的类型。 所以表达式if(b == array[i])只有在IF数组[i]为7时才是真的(这意味着从文本文件读取的值是7类似的字符 - 这是一个BELL声音 - familliar windows错误消息声音 - at所有这些都无法写入文本文件中,因此布尔表达式总是错误的。请记住这一点。如果要将它们作为整数进行比较,请使用if(b == array[i] - '0')作为&#39; 0&#39; = 48,ASCII中的数字是48到57.所以例如&#39; 4&#39;(52)减去&#39; 0&#39;(48)是(52-48)实际上是整数值4记住这一点。希望我帮助过:P