Задать вопрос
owl1n
@owl1n
fullstack developer

Как работает присвоение в C#?

Доброго времени суток. Есть такой вопрос, как работает присвоение в C#?
Есть некий код:
for (int i = 1; i < where; i++)
{
     dstr = checkmanyroads(i);
     i = dstr;
}

где checkmanyroads(i) некая функция, которая возвращает значение. Ну вот, мне надо использовать такую конструкцию, но происходит зацикливание/зависание программы. в Pascal такое бы прошло, а в C# видать нет. Есть предложения по альтернативе?
  • Вопрос задан
  • 3548 просмотров
Подписаться 3 Простой 4 комментария
Решения вопроса 1
@mayorovp
Лучше бы не использовать цикл for не по назначению, изменение параметра i в теле цикла - антипаттерн вообще-то. Такие циклы, как у вас, надо писать вот так:
int i = 1;
while (i < where)
  i = checkmanyroads(i);


PS про Паскаль вы зря сказали. Если в C-подобных языках изменение счетчика цикла в его теле допустимо, хотя и некрасиво выглядит, то в Паскале это - неопределенное поведение. Если вы когда-то писали на Паскале таким образом, то проверьте свои программы на Turbo Pascal, Free Pascal и на Delphi. Я думаю, вы будете сильно удивлены.

PPS также имеет в цикл временно поставить отладочный вывод (или научиться пользоваться отладчиком). Было бы глупо неделю пытаться правильно написать цикл из двух строчек, если ошибка в checkmanyroads.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Apfel
Вопрос в том, что возвращает ф-я checkmanyroads(i) и почему ее значение присваивается итерационной переменной i?

По коду получается, что i, перезаписываясь значением из ф-ии, бесконечно меньше where
Ответ написан
GavriKos
@GavriKos
Если возвращаемое значение checkmanyroads(i) не может быть выше where, то на что вы расчитываете? У вас i в самом цикле перезаписывается значением меньше, чем where. Поэтому цикл бесконечен
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы