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

#c #loops #while-loop

#c #циклы #цикл while

Вопрос:

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

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

Вот код:

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

Ответ №1:

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

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

 if (turtles = 0)
  

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

 if (turtles == 0)
  

Комментарии:

1. @Mechanical: Я могу только предполагать, но простое присвоение в качестве условия почти всегда является ошибкой. Его настройки компилятора выбрали безопасный маршрут и сделали так, чтобы пользователь точно знал, что он делает. Требуя заключения присваивания в круглые скобки, пользователь принял сознательное решение поместить присваивание именно туда, а не быть ошибочно принятым за сравнение. Это было бы неплохо в моей книге.

Ответ №2:

 if (turtles = 0)
   printf("Now you have %d coinsn", coin);
  

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

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

Ответ №3:

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

 if (turtles == 0)
  

Ваш просто присвоил бы 0 черепахам.

Ответ №4:

Ваш оператор if должен быть:

 if(turtles == 0)
  

На данный момент он содержит присваивание, из-за чего вы получаете ошибку.

Возможно, вы захотите рассмотреть возможность размещения строки печати после завершения цикла while, поскольку, похоже, что coins не ограничены циклом while. Если значение turtles всегда будет положительным в начале вашего блока кода, то вам не понадобится оператор if, поскольку предложение завершения цикла while означало бы, что значение turtles было равно 0 при выходе.

Если вам все еще нужен оператор if (потому что, например, turtles могут начинаться с -1), то удаление оператора if из предложения while, вероятно, все равно дало бы вам небольшое улучшение производительности, поскольку оценку не нужно было бы выполнять для каждой итерации цикла. В вашем конкретном случае, учитывая небольшое количество итераций, влияние было бы минимальным (компилятор может даже оптимизировать его для вас), но это то, что вы, возможно, захотите рассмотреть на будущее.

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