2012-06-28 6 views
0

Я пишу программу для домашней работы, которая добавит 2 8-битных двоичных числа. Я использую массивы для хранения для чтения двоичных чисел. В функции, которая фактически выполняет «добавление», она не будет выполнять цикл for. Когда я нахожусь, он показывает инициализацию переменной n для цикла, затем он переходит прямо в конец цикла и завершается. Вот мой код:для заявления не исполняется

for (int n = 7; n < 0 ; n--) 
{ 
    if (carry == 0) 
    { 
     if (bin1[n] == 0) 
     { 
      if (bin2[n] == 0) 
      { 
       sum[n] = 0; 
       carry = 0; 
      } 
      else 
      { 
       sum[n] = 1; 
       carry = 0; 
      } 
     } 
     else 
     { 
      if (bin2[n] == 0) 
      { 
       sum[n] = 1; 
       carry = 0; 
      } 
      else 
      { 
       sum[n] = 0; 
       carry = 1; 
      } 
     } 
    } 
    else 
    { 
     if (bin1[n] == 0) 
     { 
      if (bin2[n] == 0) 
      { 
       sum[n] = 1; 
       carry = 0; 
      } 
      else 
      { 
       sum[n] = 0; 
       carry = 1; 
      } 
     } 
     else 
     { 
      if (bin2[n] == 0) 
      { 
       sum[n] = 0; 
       carry = 1; 
      } 
      else 
      { 
       sum[n] = 1; 
       carry = 1; 
      } 
     } 
    } 
} 

}

Я знаю, что это не может быть наиболее эффективным способом, чтобы написать это так, пожалуйста, избежать этих ответов.

+0

Хммм ... 'Int N = 7; n <0' Делает именно то, что вы просили. – dmckee

ответ

9

Ваше условие ложно с самого начала, так что цикл выходит сразу:

for (int n = 7; n < 0 ; n--) 

вероятно Вы имели в виду:

for (int n = 7; n >= 0 ; n--) 
+0

Попытка изменения, хотя я не видел, чтобы условие было неправильным как max = 8 (я знаю, что не публиковал это), и он все еще прыгает с тела. он начинает отсчитывать массив на индексе 7 и переходит в 0. – Bizkutz

+0

@Bizkutz: цикл for начинается с 'n' при начальном значении 7, а затем продолжает выполнять тело, пока условие истинно. Если оставить исходное условие, это явно неверно, так как «n» изначально 7, поэтому n <0 - false. Не идет ли из индекса 7 в 0, что вы хотели? – Tudor

+0

мои извинения, поскольку я явно сбивал с толку условие утверждения for. Изменение решило мою проблему, спасибо. – Bizkutz

3

Если n инициализирован до 7, он никогда не будет < 0 ... Ваше состояние неверно. Должно быть > или >=.

2

Ваше условие цикла является неправильным. n никогда не будет меньше, чем 0. Попробуйте вместо этого:.

for (int n = 7; n >= 0 ; n--) 
1

(int n = 7; n < 0 ; n--)

< повернут неправильно Либо сделать:

(int n = 7; n > 0 ; n--) 

или (int n = 0; n < 7 ; n++)

+0

Если n = 7, то уже> 0, так что бы не выйти из цикла сразу? Заметьте, что я использую оператор - для уменьшения моего счетчика. – Bizkutz

+0

Цикл выполняет 'while (условие) - true' not 'до (condition)'. –

+0

Я сбивал с толку условие оператора for. Спасибо. – Bizkutz

0

Ваш цикл не выполняется, поскольку 7 не меньше 0. Чтобы исправить это, просто напишите:

for(int n = 7; n >= 0; --n) // note: I use --n, because n-- 
{       // creates temporary objects 
    .....     // and makes the program slower 
} 

Если не работает, написать несколько printf с (или cout сек, если вы используете библиотеку iostream), чтобы увидеть, где находится проблема