【问题标题】:C: Problem with while loopC:while循环的问题
【发布时间】:2011-04-20 05:10:52
【问题描述】:

我正在尝试修复这个 while 循环,但一直遇到错误。基本上让我们假设我有 4 只乌龟,每卖出一只乌龟,我都会得到一枚硬币。一旦我达到 0,我想打印我有多少硬币。我得到的错误是这样的,

赋值错误括号 用作真值 make: *** [cents] 错误 1

代码如下:

while (turtles > 0) {
turtles = turtles - 1;
coin++;
if (turtles = 0)
printf("Now you have %d coins\n", coin);
}

【问题讨论】:

    标签: c loops while-loop


    【解决方案1】:

    很高兴你的编译器给了你这个错误。

    您在 if 条件下分配 0 到 turtles

    if (turtles = 0)
    

    我想你正在尝试测试它是否等于 0。那么它应该是两个等于 == 来代替。

    if (turtles == 0)
    

    【讨论】:

    • @Mechanical:我只能推测,但仅将作业单独作为条件几乎总是错误的。他的编译器设置采取了安全的方法,让用户确切地知道他们在做什么。通过要求在作业周围加上括号,用户有意识地决定将作业放在那里,而不是被误认为是比较。在我的书中,这将是一件好事。
    【解决方案2】:
    if (turtles = 0)
       printf("Now you have %d coins\n", coin);
    

    赋值运算符总是将 0 赋值给 turtles。结果将是布尔值 [即 false(在这种情况下)],您将永远无法打印字符串。

    你的意思是if (turtles == 0),而不是if (turtles = 0)

    【讨论】:

      【解决方案3】:

      我猜你的 if 条件有问题。无论如何,您所说的条件是错误的。 应该是:

      if (turtles == 0)
      

      您只需将 0 分配给海龟。

      【讨论】:

        【解决方案4】:

        你的 if 语句应该是:

        if(turtles == 0)
        

        目前,它包含一个作业,这就是您收到错误的原因。

        您可能需要考虑在 while 循环终止后放置打印行,因为硬币似乎不属于 while 循环的范围。如果 turtles 在代码块开始时总是为正,那么你就不需要 if 语句,因为 while 循环的终止子句意味着当它退出时,turtles 为 0。

        如果您仍然需要 if 语句(例如,因为海龟可能从 -1 开始),那么将 if 语句移出 while 子句可能仍会为您提供小的性能改进,因为评估不需要为每个循环迭代执行。在您的特定情况下,鉴于迭代次数较少,影响将是最小的(编译器甚至可能会为您优化它),但这是您将来可能要考虑的事情。

        while (turtles > 0) {
            turtles = turtles - 1;
            coin++;
        }
        if (turtles == 0)  // not needed if turtles is unsigned
            printf("Now you have %d coins\n", coin);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-05-23
          • 2011-06-19
          • 2014-05-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多