2010-07-10 157 views
0

公式只是不執行。我嘗試使用printf調試和它i打印出0的代碼For循環未執行

#include <stdio.h> 

int main() 
{ 
int i, base, height; 
printf("Lumber Cross-Sectional Moment of Section\n"); 
printf("Size Area Inertia Modulus\n"); 
for (i = 0; i > 35; i++) 
{ 
    if (i == 6 || i == 12 || i == 18|| i == 24 || i == 30) 
    { 
    base = base * 2; 
    height = 2; 
    } 
    if (i != 6 || i != 12 || i != 18 || i != 24 || i != 30) 
    { 
    height = height * 2; 
    } 
    printf("%d x %d %d %d %d \n", base, height, base * height, base * 2 + height); 

}//for 
return (0); 
}//main 
+4

另一個bug - 在循環開始時不要假設base = 0和height = 0。他們可能是任何東西。 – 2010-07-10 02:02:03

+0

看着你的其他問題,你似乎不明白某些構造是如何工作的,而且你不知道如何使用調試器(用於逐步執行代碼,檢查變量值並顯示它如何跳過循環)。 – 2010-07-10 14:07:59

回答

16

的端部應該是

for (i = 0; i < 35; i++) 

環路當條件爲真時將只執行的主體。

4

應該

for (i = 0; i < 35; i++) 

由比爾蜥蜴說。

for (i = 0; i > 35; i++) 

因爲0 < 35從未成立,因此循環體從不執行。

0

正如前面所說的兩個隊友 for循環將不會執行,直到條件爲真。在問它之前,你應該自己調試它。 :)

3

你需要考慮你的條件是什麼意思。其他人提到了循環未執行的原因。讓我們來看看另一個條件:

if (i != 6 || i != 12 || i != 18 || i != 24 || i != 30) 

你什麼時候認爲上述條件是錯誤的?我們需要看兩種情況:

  • i等於6。所以,i != 6是假的,但條件(i != 12等)的各個另一部分是真實的。這是因爲6只等於6,而沒有其他數字。所以整體情況是真實的。
  • i不等於6.現在,i != 6是真實的,因此整個條件是成立的。

因此,您的if條件總是如此。

此外,想想會發生什麼,如果你的循環,直到大一些,比方說215你會希望有這樣一個條件:

if (i == 6 || i == 12 || ... || i == 210) 

當然,必須有一個更好的做你想要什麼。我想你想要的是將base乘以2,並且當i可以被6整除時重置height;否則乘height由2的代碼結構變爲:

/* not legal C */ 
if (i is divisible by 6) { 
} else { 
} 

要通過6個測試整除,記住,數字nmn % m給你的n通過m所得的餘數。

0

我想如果你重塑代碼和條件,它會好很多。 你可以改變for循環到for (i=1 ; i<36 ; i++)?這樣你可以簡化循環內部的if條件,正如你看到的,你正在檢查它是否是代碼中的倍數6。 你可以在這些線路上思考。

一些更多的指針:

  1. 初始化所有變量的缺省值。
  2. 以更好的可讀性打印輸出。從中刪除x。同樣使用\ t來分隔值。
0

第一個循環永遠不會執行。首先檢查(i> 35),在你的情況下,我的循環將不會執行。