2010-07-10 168 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),在你的情况下,我的循环将不会执行。