2016-12-02 2 views
-5

У меня есть следующая определенный в моей программеMultiple декларации в течение цикла

int row; 
int col; 

for(int k = 1; k <= sizestr1; k++){ 
    for(row = k, col = 1; (row == 0 && col <= sizestr2); row-- , col++){ 

     //logic here 
    } 
} 

После отладки, как представляется, не логика во внутреннем цикле будет выполняться. Является ли определение вышеуказанного внутреннего цикла действительным в C++

+4

'строка == 0 'это все дни s FALSE. –

+1

'row' никогда не получает значение' 0'. Вы хотели написать 'row! = 0' вместо' row == 0'? –

+0

Я предполагаю, что синтаксически корректно (что говорит ваш компилятор?), Но трудно понять логику, например переменную строку. Предположим, у вас есть важные предупреждения (неинициализированные переменные), которые дают ВАЖНЫЕ ошибки времени выполнения (алгоритмические). –

ответ

3

Во внешнем контуре k начинается с 1 и идет вверх. Поэтому он никогда не получает значение 0. А внутренний цикл требует row == 0 (в сочетании с col <= sizestr2). Поэтому условие внутреннего цикла никогда не выполняется, поэтому внутреннее тело цикла никогда не выполняется.

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

int row; 
int col; 

for(int k = 1; k <= sizestr1; k++){ 
    for(row = k, col = 1; row => 0 && col <= sizestr2; row-- , col++){ 

     //logic here 
    } 
} 

В качестве альтернативы вы можете протестировать row переменные для отрицательного значения внутри петля разорвать петлю соответственно:

int row; 
int col; 

for(int k = 1; k <= sizestr1; k++){ 
    for(row = k, col = 1; col <= sizestr2; row-- , col++){ 
     if(row < 0) 
      break;  // terminate the inner loop 

     //logic here 
    } 
} 
+0

yep я пропустил это, я хочу завершить этот внутренний цикл, когда значение строки меньше 0 – RRP

+0

@RRP. См. Расширенный ответ , – CiaPan

Смежные вопросы