#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);