Запятые C ++ внутри цикла for и его эквивалентное выражение? - PullRequest
0 голосов
/ 13 июня 2018

Так что мне было интересно, каким будет эквивалентное выражение для цикла for, я, честно говоря, никогда не видел цикла, написанного таким образом, из-за недостатка опыта.

Вот код:

    string convertToBase7(int num) {
     int res = 0;
    for(int i=0; num!=0; res += pow(10,i++)*(num % 7), num /= 7) {}
    return to_string(res);
}

так что после каждой точки с запятой выполняются инструкции в той последовательности, в которой они написаны?Также, скажем, при i = 2, тогда res + = pow (10,3)?Это правильно?

1 Ответ

0 голосов
/ 13 июня 2018

Итак, если у вас есть:

for (int i = 0, j = 0; i < 5 && j < 3; ++i, ++j)

аналогично:

int i = 0, j = 0;
while (i < 5 && j < 3) {
    ++i;
    ++j;
}

, то же самое происходит и с записями после точки с запятой на каждой итерации в порядкеэто написано?

Как вы можете видеть сверху код да .

Также, скажем, при i = 2, тогда res + = pow(10,3)?Это правильно?

Не обязательно, потому что не гарантируется, что i будет увеличен до того, как он будет передан в функцию.Проверьте это: Порядок операций для преинкремента и постинкремента в аргументе функции?

У вас также есть эта проблема

num != 0;

что произойдет, еслиделение:

num /= 7;

случайно пропускает ноль, поэтому я рекомендую вам сделать следующее:

num > 0;

Итак, со всем вышеперечисленным я бы написал эту строку:

for(int i=0; num!=0; res += pow(10,i++)*(num % 7), num /= 7) {}

следующим образом:

 for(int i=0; num!=0; ++i, res += pow(10,i)*(num % 7), num /= 7) {}

если мне нужно убедиться, что i увеличивается до того, как оно передается в функцию, или .:

for(int i=0; num!=0; res += pow(10,i)*(num % 7), ++i, num /= 7) {}

Если янеобходимо убедиться, что i увеличивается после того, как оно передается в функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...