2012-06-28 73 views
0

我寫一個程序,對於家庭作業,這將增加2 8位二進制數。我將使用數組來存儲讀取的二進制數。在實際上會做「加法」的函數中,它不會執行for循環。當我通過時,它顯示了循環變量n的初始化,然後直接到循環結束並退出。這裏是我的代碼:for語句不執行

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

嗯...'詮釋N = 7寫一些printf秒; n <0'它正在做你正在問什麼。 – dmckee

回答

9

你的條件是從一開始就假,所以循環立即退出:

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

你大概的意思是:

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

試圖改變,但我沒有看到的情況是錯誤的,因爲最大= 8(我知道我沒有張貼),它仍然跳身體。他環開始讀取該陣列在標7和變爲0 – Bizkutz

+0

@Bizkutz:用在初始值7'N' for循環啓動,然後保持執行該主體,而條件爲真。如果你離開初始條件,顯然是不正確的,因爲'n'最初是7,所以n <0是錯誤的。是不是從索引7到0你想要什麼? – Tudor

+0

我很抱歉,因爲我很明顯地把自己與條款的條件混淆了。這個改變解決了我的問題,謝謝。 – 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,而不是直到(條件)。 –

+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 
} 

如果不起作用,(如果你使用的iostream庫或cout S),看看問題出在哪裏