我不知道为什么这段代码没有突破while循环:
int table_size = 953;
store hash_table[953];
for(int i = 0; i < table_size; i++)
hash_table[i].count = 0;
//bunch of stuff to get hash value here
while(hash_table[hashNum].data != pString || hash_table[hashNum].count != 0){
hashNum++;
if(hashNum > table_size)
hashNum = 0;
cout << hash_table[hashNum].count;
// to check the value of the count in the array, it IS 0, thus should have broken the loop
}
答案 0 :(得分:1)
while(hash_table[hashNum].data != pString && hash_table[hashNum].count != 0)
在你的代码中,如果两种情况都为真,循环将继续,hash_table[hashNum].count == 0
不足以使该子句为假。
答案 1 :(得分:1)
hash_table[hashNum].count
等于零不足以终止循环,因为您在终止测试中的两个条件之间使用||
(“或”)。如果hash_table[hashNum].data
不等于pString
,则无论hash_table[hashNum].count
是什么,循环都将继续。
答案 2 :(得分:1)
我认为您的循环条件应该在hashNum != 0
而不是hash_table[hashNum].count != 0
。
其次,在你的条件下应该有&&
而不是||
。
这些都是疯狂的猜测,因为这个问题中缺少很多信息。
答案 3 :(得分:1)
您应该查看二进制逻辑,尤其是De Morgan theorem
!(a && b) is equivalent to (!a) || (!b)