我的问题与已经问过的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
答案 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
,则true
为b
。
这是尝试取消明确的分配,可能更快:
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