#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
цикла до конца заключающего блока.