2011-10-31 2 views
0

이 C 프로그램을 실행 중이지만 "대답은 10입니다."라는 메시지가 올바른 시간에 중단 되더라도 "대답은 0"입니다.C 문에 break가있는 논리 오류가 있습니다.

무엇이 잘못되었는지 말해 줄 수 있습니까?


#import <Foundation/Foundation.h> 

int main (int argc, const char * argv[]) 
{ 
    int i; 
    for(int i = 0; i < 12; i++){ 
     printf("Checking i = %d\n", i); 
     if(i + 90 == i * i) { 
      break; 
     } 
    } 
    printf("The answer is %d.\n", i); 
} 

답변

2

문제는 두 개의 i입니다.

int main (int argc, const char * argv[]) 
{ 
    int i; //Declares outer i 
    for(int i = 0; i < 12; i++) //Declares a NEW i 
    { 
     printf("Checking i = %d\n", i); 
     if(i + 90 == i * i) 
     { 
      break; 
     } 
    } 
    printf("The answer is %d.\n", i); //Uses the outer i 
} 
1

기본 범위 혼란 다음 for 루프 내부를 오버라이드 (override)의 main 함수 본문의 외부 범위에서 하나, 또 다른 : 당신은 두 개의 서로 다른 변수 i라고합니다.

외부 변수는 초기화되지 않으므로 정의되지 않은 동작이 있습니다.

int i; 
for (i = 0; i < 12; i++) 
/* ^^^^^     use existing variable! */ 
{ 
    printf("Checking i = %d\n", i); 
    if (i + 90 == i * i) 
    { 
    break; 
    } 
} 
0

그것은 여분의 "INT"이 될 수 :

은 무슨 말을 의미하는 것은 이것이다? for 루프에서 루프가 종료 될 때 범위를 벗어나는 "i"의 또 다른 인스턴스를 선언하고 있습니다.

0
for(int i = 0; i < 12; i++){ 

당신은 for 루프의 범위 밖에서 i을 숨기는 여기 다른i를 만드는.

변경하려면 다음

int i; 
... 
for (i = 0; i < 12; i++){ 
0

당신이 두 개의 서로 다른 변수를 가지고 있기 때문에 "나"- 내부 범위에서 하나 (당신이 0..11에서 증가하는), 그리고의 하나 바깥 쪽 범위. 외부 범위에있는 것을 인쇄합니다.

SOLUTION :

변화 "에 대한 (INT I = ...)"를 "대 (I = ...)"