Синтаксис Double For Loop в C

Я новичок в C и должен написать код, который эмулирует заданную функцию. Тем не менее, мне трудно понять, что делает второй цикл в этом коде, явно. Синтаксис, похоже, не соответствует стандарту для синтаксиса цикла:

for ( init; condition; increment ) { statement(s); } 

Вот код, который я рассматриваю, и это второй цикл, который я не соблюдаю, и я не вижу ни одной онлайн-версии этого

 for (i = 0; i <= (n1-n2); i++){ count=0; for(j = i,k = 0; k < n2; j++,k++){ if (*(s1+j)!=*(s2+k)){ break; } else count++; if(count==n2) total++; } } 

Я предполагаю, что это два для циклов в одном, так как есть два приращения. И я думаю, что неравенство похоже на «цикл while», но я не уверен. Путаница заключается в том, что, как представляется, не существует условия для j-цикла. Я не уверен, что это ярлык синтаксиса или если есть специальный цикл, я не могу найти ресурс для онлайн.

Я предполагаю, что это два для циклов в одном, так как есть два приращения.

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

Для оператора цикла, такого как

  for(j = i,k = 0; k < n2; j++,k++){ 

можно интерпретировать как

  for( (j = i,k = 0) ; (k < n2) ; (j++,k++) ){ ^^^^^^^^^^^ ^^^^^^ ^^^^^^^ init condition post loop body operation. 

Теперь блокирование инициализации и пост-тела используют оператор запятой .

Связанный, цитируя C11 , глава §6.5.17

Левый операнд оператора запятой оценивается как выражение void; между его оценкой и точкой правильного операнда есть точка последовательности. Затем оценивается правый операнд; результат имеет свой тип и значение.

Чтобы уточнить, тот же синтаксис можно разбить на

  j = i; //initialization, only once for( k = 0 ; k < n2 ; k++ ){ // good ol' syntax //......loop body j++; //last expression in the body. } //end of loop 

Вы можете выполнить несколько инициализации и инкремента в одиночном for цикла точно так же, как в вашем примере (разделенном запятой).

 for(first = 0, second = 0 ; your_condition ; ++first, ++second) ... 

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

Надеюсь это поможет!

 for(j = i,k = 0; k < n2; j++,k++){ initialisation condition increment or decrement 
  1. здесь они рассматривают две переменные для отслеживания.
  2. Его не два для циклов в одном for loop
  3. причина, по которой это делается, - инициализировать и обновлять переменные на каждой итерации.
  4. Хотя у вас могут быть проблемы, если вы используете несколько переменных типа внутри for loop для инициализации