2010-07-10 17 views
0

수식이 실행되지 않습니다. 나는 디버깅 할 수 printf를 사용하여 시도하고루프가 실행되지 않습니다

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

조건에 해당하는 경우에만 실행됩니다 루프의 몸이어야한다 코드

#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

다른 버그 - 루프의 시작 부분에 base = 0 및 height = 0이 있다고 가정하지 마십시오. 그들은 아무것도 될 수 있습니다. –

+0

다른 질문을 살펴보면 특정 구문이 작동하는 방식을 이해하지 못하는 것 같으며 디버거 사용법을 알지 못합니다 (코드를 단계별 실행하고 변수 값을 확인하며 루프를 건너 뛰는 방법을 보여줍니다). –

답변

16

의 끝에서 i 0을 출력한다. 빌 도마뱀에 의해 말했듯이

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 그래서, i != 6이 거짓 6. 동일하지만 조건 (i != 12 등)의 다른 모든 부분은 사실이다. 이것은 6이 6이고 다른 숫자는 없기 때문입니다. 따라서 전반적인 조건은 참입니다.
  • i이 6이 아닙니다. 이제 i != 6이 true이므로 전체 조건이 true입니다.

위의 조건은 항상 true입니다. 또한

, 당신은 많은 수의 때까지 반복된다면 어떻게 될지에 대해 생각의이 (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으로 가분성을 테스트 할 수 nm를 들어, n % m 당신에게 m로 나눈 n의 나머지를주는 것을 기억하십시오.

0

코드와 조건을 바꿔 보면 훨씬 좋을 것 같습니다. for 루프를 for (i=1 ; i<36 ; i++)으로 변경할 수 있습니까? 이 방법을 사용하면 루프 내의 if 조건을 단순화 할 수 있습니다. 코드에서 6의 배수인지 확인하고 있습니다. 그 라인을 생각하면됩니다.

좀 더 포인터 :

  1. 는 기본값으로 모든 변수를 초기화합니다.
  2. 출력을 더 읽기 쉬운 방식으로 인쇄하십시오. 그것에서 x를 삭제하십시오. 또한 \ t를 사용하여 값을 균등하게 배치하십시오.
0

첫 번째 루프는 실행되지 않습니다. 귀하의 경우 i < 35 번 (i> 35)에 대한 점검을 위해 처음으로 루프가 실행되지 않습니다.

관련 문제