2015-07-13 9 views
-5

я написал код структурированный как этогоДля такта: увеличения и уменьшения переменных

int function(){ 
     int i, counter = 0; 

     for(i=INTEGER; i>0; ++counter, --i){ 
       if(condition){ 
        //do stuff 
        i+=2; 
        continue; 
       } 
       if(condition){ 
        //do stuff 
        i+=35; 
        continue; 
       } 
       if(condition){ 
        //do stuff 
        continue; 
       } 
       if(condition){ 
        //do stuff 
        continue; 
       } 
     } 
     return counter; 
    } 

У меня есть проблемы, чтобы полностью понять механизм приращения переменных в качестве параметров для такта. В случае выше:

  • Как это возможно, что i переменная увеличивается и уменьшается хорошо работать, вместо переменной counter при возврате имеет только 1 увеличение?
  • Возможно?
+3

не понимаю ваш вопрос. Просьба уточнить! – Raman

+0

@ARBY, если значение INTEGER определяет значение 10, например, при возврате переменная 'counter' должна иметь значение 10, правильно? Вместо этого его значение равно 1. – wing

+4

Пожалуйста, напишите реальный код, который может выполнить любой пользователь. Кроме того, добавьте выходные данные ('printf') в код, чтобы продемонстрировать проблему. – anatolyg

ответ

1

Переменная counter увеличивается в течение заявлении столько же раз, сколько переменной i уменьшается в для постановки

for(i=INTEGER; i>0; ++counter, --i){ 

После continue заявлении эта часть для постановки

++counter, --i 

выполнено.

На самом деле этот цикл с продолжить заявление

for(i=INTEGER; i>0; ++counter, --i){ 
      if(condition){ 
       //do stuff 
       i+=2; 
       continue; 
      } 
      //... 
    } 

эквивалентно следующего

for(i=INTEGER; i>0; ++counter, --i){ 
      if(condition){ 
       //do stuff 
       i+=2; 
       goto Label; 
      } 
      //... 
    Label:; 
    } 
+0

ОК, это то, что я тоже знаю. Но когда я выполняю свой код, у меня только одно увеличение. Переменная 'counter' не используется в каком-либо другом месте моего кода. Это странно. – wing

+0

@wing Вы уверены, что цикл имеет несколько итераций? Возможно, из-за изменения переменной i внутри тела цикла цикл имеет только одну итерацию. –

+0

Но в вашем коде вы также изменяете 'i' в теле цикла, тогда как вы увеличиваете счетчик только в' '' '' '' '', если вы не коснетесь 'counter' в тех частях, которые вы скрывали за' // do stuff'.Откуда вы знаете, что ваш цикл вводится не один раз? –

0

OK ребят я отлаживать код, пропустившие return 0 в конце основных. Это вызвало неправильное возвращаемое значение.

+6

Тогда, пожалуйста, удалите вопрос, потому что это простая типографская ошибка. Хотя подобные вопросы могут быть по-теме здесь, этот вопрос был разрешен таким образом, который вряд ли поможет будущим читателям. Этого часто можно избежать путем выявления и тщательного изучения кратчайшей программы, необходимой для воспроизведения проблемы до публикации. – moffeltje

+0

Это не позволяет мне удалить вопрос, я попробовал прямо сейчас – wing

+0

@moffeltje - за исключением того, что правильное понимание оператора запятой может быть полезно другим программистам. Разве это не помешает сохранить? – AgapwIesu

0

То, что вы говорите, происходит, не должно происходить. Оператор запятой объединяет два оператора так, чтобы они выполнялись как один оператор. Если -1 выполняется, счетчик ++ также должен выполняться одновременно. Что-то еще происходит.

+0

Извините, сэр, я неправильно понял значение 'as'. Я не пытаюсь ввязываться в какие-либо аргументы здесь. Я удалил свои комментарии. Если бы я причинил вам боль, я бы пожалел об этом. Я просто пытался быть прав. Это все. –

+1

Не было совершено преступление, и я надеюсь, что никакого преступления не будет. Я тоже удалил свои комментарии. "Все хорошо, что хорошо кончается." Кстати, ваш английский выдающийся. – AgapwIesu

+0

Если вы так говорите. :-) –