2011-04-20 88 views
1

即时尝试修复此while while循环,但仍然遇到错误。基本上让我们假装我有4只乌龟,对于我卖的每只乌龟,我都会得到一枚硬币。一旦我达到0,我想打印我有多少个硬币。错误即时得到是这样的,围绕分配 C:While循环问题

错误括号用作真值的化妆:*** [仙] 错误1

下面是代码:

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

回答

5

很高兴您的编译器为您提供了该错误。

分配 0到turtles你如果条件:

if (turtles = 0) 

我想你正试图测试是否等于0。然后,它应该是两个平等等于==代替。

if (turtles == 0) 
+0

尴尬:(谢谢你们,哈哈 – yoshyosh 2011-04-20 05:37:21

+0

为什么这是一个编译器错误,而不是警告 – 2011-08-21 07:17:02

+0

@Mechanical:我只能猜测,而只是单纯具有分配为条件几乎总是错误他的编译器设置了安全路线,并让用户知道他们在做什么。通过在任务周围要求括号,用户有意识地决定在那里进行任务,而不是误认为是比较。这在我的书里会是一件好事。 – 2011-08-21 08:45:02

2

您的if语句应该是:

if(turtles == 0) 

目前,它包含一个任务,这就是为什么你会收到错误。

您可能需要考虑在while循环结束后放置您的打印行,因为硬币似乎没有被限制在while循环中。如果龟在你的代码块开始时总是肯定的,那么你不需要if语句,因为while循环的终止子句意味着当它退出时龟是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); 
2
if (turtles = 0) 
    printf("Now you have %d coins\n", coin); 

赋值运算符将始终分配0到turtles。结果将是布尔值[即false(在这种情况下)],并且您永远不会打印字符串。

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

2

我想它有问题,如果你的条件。无论如何,你所说的情况都是错误的。 它应该是:

if (turtles == 0) 

此致只会0赋给海龟。