C для цикла с двумя условиями

#c #for-loop

Вопрос:

Можно ли использовать цикл for с 2 условиями? Я не могу найти ничего подобного в Интернете. Если да, может ли кто-нибудь подсказать мне синтаксис? Или, если нет, у кого — нибудь есть идеи, как я мог бы сделать это иначе? Вот мой код:

 for (int i = 0; i<4; i   amp;amp; int a = 4;a>0;a--){

    mess.stc[i] = ((mess.Acal[a][0] - mess.Uref) - (mess.Acal[a-1][0] - mess.Uref))
            / (kali.ApH[a] - kali.ApH[a-1]);
    mess.tcal[i] = (mess.Acal[a][1]   273.1   mess.Acal[a-1][1]   273.1) / 2;
    mess.Stcal[i] = (double) mess.stc[i] / mess.tcal[i];

}
 

Я видел сообщение, в котором говорилось, что это возможно с помощьюamp;amp;, но я получаю ошибку:

 ../AD7793/Messung.c:604:29: error: expected expression before 'int'
  604 | for (int i = 0; i<4; i   amp;amp; int a = 4;a>0;a--){
      |                             ^~~
../AD7793/Messung.c:606:28: error: 'a' undeclared (first use in this function)
  606 |  mess.stc[i] = ((mess.Acal[a][0] - mess.Uref) - (mess.Acal[a-1][0] - mess.Uref))
 

Комментарии:

1. Это должно быть объявлено в первом операторе, так как for (int i = 0, a = 0; i < 4 amp;amp; a < 4 amp;amp; a > 0; a--) ваша логика будет эквивалентна инициализации a до 4 на каждой итерации, что нежелательно

2. @git-bruh спасибо тебе!

3. @git-bruh a < 4 , учитывая определение a и a-- , вообще не имеет смысла

4. О, извините, я добавил по ошибке, так как i < 4 условие тоже было там, не заметил этого

Ответ №1:

Вы не можете добавлять определения переменных везде, где хотите, в оператор цикла for.

Вы, наверное, хотите:

     for (int i = 0, a = 4; i < 4 amp;amp; a > 0; i   ,a--){
 

Комментарии:

1. Просто примечание для OP: объявление обоих i и a в первом операторе for цикла работает, потому что они оба имеют один и тот же тип ( int в данном случае). Это не сработает, если вы хотите объявить две переменные разного типа (например: for (int x = 0, long y = 0; ...; ...) не будет работать).

2. И в случае, если это не очевидно для OP, переменные могут быть объявлены перед for циклом, но затем их область действия будет выходить за пределы for цикла до конца заключающего блока.