Выражения и для циклов в C - PullRequest
0 голосов
/ 20 мая 2018

Это правильный способ присвоения выражения переменной?

int a == ( i<3 );

И я хочу использовать цикл for, подобный этому

for(i=0;a; i++)

Ответы [ 3 ]

0 голосов
/ 20 мая 2018

Вы не можете этого сделать, с чего бы вы вообще этого хотели?Можете ли вы привести пример, где это было бы полезно?Просто любопытно, может быть, мы найдем лучшее решение :)

Кроме того, вы можете прочитать больше о циклах на http://en.cppreference.com/w/cpp/language/for

0 голосов
/ 20 мая 2018

Вы можете использовать макросы, такие как:

#include <stdio.h>
#define a(i) i < 3
int main(void) {
    for(int i =0; a(i); i++) {
        printf("%d\n",i);
    }
    return 0;
}
Output
0
1
2

РЕДАКТИРОВАТЬ

Как и другие говорили, макрос не является хорошей идеей, когда условие большое.В этом случае вы можете создать отдельную функцию для сложной логики и использовать ее в вашей части условия цикла for.Например:

int a(i) {
  return i < 3; // Your condition. It may be even more complex as per your requirement.
}

Затем вы можете использовать эту функцию в цикле for следующим образом:

for(int i =0; a(i); i++ ){...}
0 голосов
/ 20 мая 2018

Оператор присваивания - =.Таким образом, правильный способ присвоения выражения переменной -

int a = i < 3;

Точнее, это присваивает переменной значение выражения.Само выражение не присваивается переменной.Это означает, что выражение вычисляется немедленно.Когда вы делаете

for(i=0;a; i++)

Значение a никогда не изменится, даже если i не изменится.

Идиоматический способ написания циклов - записать логическое выражение inline:

for(i=0;i<3; i++)

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

int condition(int i) {
    return i < 3;
}

Теперь вы можете записать цикл for как

for (i = 0; condition(i); i++)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...