C: проблема с циклом while - PullRequest
       10

C: проблема с циклом while

1 голос
/ 20 апреля 2011

Я пытаюсь исправить это, пока цикл повторяется, но ошибки продолжаются. По сути, давайте представим, что у меня 4 черепахи, за каждую проданную черепаху я получаю монету. Как только я доберусь до 0, я хочу напечатать, сколько у меня монет. Я получаю следующую ошибку:

Ошибка в скобках вокруг присваивания используется как истинное значение make: *** [центы] Ошибка 1

Вот код:

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

Ответы [ 4 ]

5 голосов
/ 20 апреля 2011

Рад, что ваш компилятор выдал вам эту ошибку.

Вы присваиваете 0 turtles в вашем условии if:

if (turtles = 0)

Полагаю, вы пытаетесь проверить, равно ли оно 0. Тогда для равенства должно быть два равных ==.

if (turtles == 0)
2 голосов
/ 20 апреля 2011

Я полагаю, у вас проблемы с вашим условием if. Указанное вами условие в любом случае неверно. Должно быть:

if (turtles == 0)

Ваш просто назначит 0 черепахам.

2 голосов
/ 20 апреля 2011
if (turtles = 0)
   printf("Now you have %d coins\n", coin);

Оператор присваивания всегда назначает 0 на turtles.Результатом будет логическое значение [т.е. false (в данном случае)], и вы никогда не получите напечатанную строку.

То, что вы имели в виду, было if (turtles == 0), а не if (turtles = 0).

2 голосов
/ 20 апреля 2011

Ваше утверждение 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...