【问题标题】:C programming: BooleanC 编程:布尔值
【发布时间】:2018-01-09 15:39:37
【问题描述】:

我有一个关于布尔值及其 false 和 true 值的快速问题。我知道 0=false 和 1=true,但是根据我作为示例给出的代码,它另有说明。

当我们要查找所有23岁以下且具有BEL国籍的用户时,为什么等于0?

void opgave_1 (loebsdata2017 *alle_loebsdata2017 ) {
    int i = 0;
    for (i = 0; i < MAX_RYTTERE; i++) {
        if(alle_loebsdata2017[i].rytteralder < 23 &&
           strcmp(alle_loebsdata2017[i].nationalitet, "BEL") == 0)
        {
            printf("%s %s %d %s \n", alle_loebsdata2017[i].rytternavn,
               alle_loebsdata2017[i].rytterhold,
               alle_loebsdata2017[i].rytteralder,
               alle_loebsdata2017[i].nationalitet);
        }
    }
} 

【问题讨论】:

  • 在不知道输入和调用代码等的情况下无法回答。我在发布的代码中没有发现明显的问题。您最好通过调试器运行此代码并观察变量的值。
  • 您在哪里看到该代码中等于 0 的布尔值?如果您指的是if 条件的最后一部分,您应该查看strcmp 函数的手册。
  • 你的意思是strcmp()的返回值吗? strcmp() 不返回布尔值,它返回一个整数
  • 看起来“为什么它等于 0”这个问题最好被问成“为什么将 strcmp() 与 0 进行比较?”

标签: c boolean


【解决方案1】:

什么时候

strcmp(alle_loebsdata2017[i].nationalitet, "BEL") == 0

这可以认为是:

alle_loebsdata2017[i].nationalitet 等于 "BEL"

因为当被比较的字符串相等时,strcmp() 函数返回 0

来自:

https://www.tutorialspoint.com/c_standard_library/c_function_strcmp.htm

【讨论】:

    【解决方案2】:

    您的代码中出现的0 不是布尔值。

    引用 strcmp 规范,例如http://en.cppreference.com/w/c/string/byte/strcmp

    返回值
    如果 lhs 按字典顺序出现在 rhs 之前,则为负值。
    如果 lhs 和 rhs 比较相等,则为零。
    如果 lhs 按字典顺序出现在 rhs 之后,则为正值。

    因此,与0 的比较检查字符串是否等于“BEL”,正是您所描述的。

    【讨论】:

      猜你喜欢
      • 2016-04-13
      • 2023-03-17
      • 2017-12-13
      • 1970-01-01
      • 1970-01-01
      • 2014-12-09
      • 1970-01-01
      • 2016-01-12
      • 2012-06-05
      相关资源
      最近更新 更多