Как объявить int и удвоить цикл for в target-c? - PullRequest
1 голос
/ 20 ноября 2010

Я пытался

    for (int i = 0, double j = 0.0f; i <= 30; i++, j++)

но это не понравилось. Он сказал "J 'необъявленный". Это работало, если оба были целыми. Разве нет способа объявить это в цикле for?

Ответы [ 4 ]

10 голосов
/ 20 ноября 2010

Вы можете использовать только один оператор в инициализаторе цикла. Так что вам придется объявить хотя бы один из ваших переменных вне цикла:

int i;
double j;
for (i = 0, j = 0.0f; i <= 30; i++, j++)

Если он работал с двумя int s, вы, вероятно, использовали for (int i = 0, j = 0; ...), который действителен, поскольку используется только один оператор (который объявляет несколько переменных).

1 голос
/ 20 ноября 2010

Инициализирующая часть цикла for может быть только одним оператором.Вы можете объявить несколько переменных общего типа в одном выражении, например int i, j;, но вы не можете объявить несколько переменных разных типов таким образом.

Если вы хотите ограничить оба значения теломfor -loop, вы можете заключить объявление и цикл for в один составной оператор, например так:

{
    double j = 0.0;
    for (int i = 0; /*test*/; /*at-end statement*/) {
        /* body */
    }
}

Вы также можете обойти это, используя анонимную структуру (хотя этопросто затеняет смысл, он делает именно то, что вы хотите):

for (struct {int i; double j;} ctx = {0, 0.0}; /*test ctx.i or ctx.j*/; /*at-end*/) {
    /*body*/
}
0 голосов
/ 20 ноября 2010

Я не программист для объективного c, но я знаю о циклах for, что вы не можете объявить так с запятой между нимиint i, double j; не допускается.Итак, что вы должны сделать, это решить использовать двойное или целое число.Другими словами, нет способа объявить так, как вы сделали в скобках цикла for.Используйте либо int i, j;, либо double i, j!

0 голосов
/ 20 ноября 2010

Как насчет просто объявить их перед циклом? Запятая в объявлении переменной предназначена только для разделения похожих типов, и это в любом случае сбивает с толку. Не говоря уже о том, что труднее узнать, что именно произойдет, когда. Кстати, «++» в плавающей запятой технически не дает точных значений (не гарантируется, как int), поэтому мне также любопытно, зачем вам это нужно.

int i;
double j = 0.0f;
for( i=0; i<=30; i++ ) {
   j += 1.0f;
   // other stuff
}

В любом случае, легче читать. Возможно, особенно для других, пока незнакомых с тем, что он делает.

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