【问题标题】:How to check if all values in bool array are true?如何检查 bool 数组中的所有值是否为真?
【发布时间】:2016-02-10 12:56:36
【问题描述】:

C中, 检查布尔表中的所有值是否为真的最好和最简单的方法是什么? 我尝试了类似的方法,但它不起作用

for(i = 0; i < value; i++){
            if(bool_table[i] == 0)
                table_true = 0;
            else
                table_true = 1;
    }

这段代码的问题是,有时如果第一个值为真,那么它会设置table_true = 1

【问题讨论】:

  • "那么它将设置table_true = 1" 怎么可能?我会写if (bool_table[i] == 0) { table_true = 0; break; },只是为了效率。
  • 如何初始化table_true 变量?确保给出一个初始值,否则你会得到一个未初始化的值。
  • 在循环之前,添加table_true = 1;,但为了更高效而不是条件,您可以在循环中添加table_true &amp;= bool_table[i]
  • 另外,你也可以在找到false元素后立即从循环中break,因为检查后续元素不能改变结果。
  • 天哪。您的编辑使情况变得更糟。以前的 cmets 基于您问题的原始版本,这是一个更好的开始。你现在所拥有的总会给你bool_table[value - 1]的价值。

标签: c arrays boolean


【解决方案1】:

我不确定人们如何评价“最佳”或“最简单”。 “最好”是否意味着最快?或者最少的代码行数?最简单的,对于初学者来说是最简单的吗?或者对于一群吃吃睡 C 并且经常使用指针的开发者?

这是我有点不合常规的方法:

bool *each = bool_table; // pointer to first element
bool *end = each + value; // stop condition
while (*each && each != end) {
    each++;
}
return each != end;

【讨论】:

  • 基于WTF per line ratio,我建议您不要在严肃的软件中使用该算法。虽然它可以解决问题,但它有点迟钝且难以理解。
【解决方案2】:

如果下面的循环遍历整个数组而没有找到false 条目,那么在循环结束时i 将等于value

for(i = 0; i < value; i++)
    if ( !bool_table[i] )
        break;

table_true = (i == value);

【讨论】:

  • int table[3] = {1,1,1,1,1,1,1,1,1}; int n,t = 0; for(n = 0; n &lt; 3; n++){ if(!table[n]) break; else t = (n == 3); } printf("%d",t);
  • @WhizzMiray 请注意,n==3 在循环内永远不会为真。
  • 如果将value重命名为book_table_len,这段代码会更容易理解。
【解决方案3】:

这样的事情应该可以解决问题:

table_true = 1;
for(i = 0; i < value; i++)
        if (!bool_table[i]) {
            table_true = 0;
            break;
        }

【讨论】:

    猜你喜欢
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多