2017-11-02 13 views
-1

Hy, 왜 변수 b가 변경되지 않는지 이해하고 싶습니다. 인쇄 할 때 항상 정의 된대로 (제로) 정의해야합니다. 내 코드에 무슨 문제가 있습니까 ??for 루프에서 변수 b가 변경되지 않는 이유는 무엇입니까?

이 코드에서는 10^b < = n (주어진 n과 정수도 포함) 인 최대 정수 (b)를 찾고 싶습니다.

#include <stdio.h>       
#include <math.h> 

int lg (int n);        

int main() { 

int a = 0; 
scanf("%d", &a); 
printf ("\nN=%d e M=%d\n", a, lg(a)); 

return 0; 
} 

int lg (int n) { 
    double b = 0.0; 

    for (int i=0; i==n; i++) { 
    if (pow(10, i) <= n) { 
    double b = i; 
    } else { 
    } 
    } 
    return (int)b; 
} 
+1

절대 또는 한 번만 ... – Ctx

+0

@Ctx correct .. whoops – yano

+0

for 루프 조건이 잘못되었습니다. 나는 당신이'i == n' 대신에'i

답변

4

당신은 당신의 루프 내부 b라는 새 변수를 선언하고 i 동일한를 설정하는 :

는 (그것은 C로 작성) 내 코드입니다. 이것이 다른 범위이기 때문에 루프 앞에 선언 된 b과 같은 변수가 아닙니다.

b = i; 

루프 상태로 라인

double b = i; 

변경은 i==n;로 설정됩니다. 즉, 입력 값이 0 인 경우 루프가 한 번만 실행됩니다. 이는 아마도 i < n;이어야합니다.

+0

하지만 이것은 단지 21입니다 ... – Ctx

+0

당신이 말한 라인은 바뀌지 만 아무런 변화가 없습니다. –

+0

@DarkHelmet 제 편집을 확인하십시오. 루프 상태도 변경해야합니다. –

1

b라는 두 개의 변수가 있습니다. 범위가 함수 lg 인 범위와 범위가 for 루프의 if 절로 제한된 범위 당신은 후자를 수정하지만 전자를 돌려 준다. 'double'키워드를 사용하면 새로운 값을 선언 할 수 있습니다. 이는 일반적인 오류의 원인이며, 컴파일러에서 경고를 표시하면 문제를 경고합니다.

0

"b"변수를 두 번 선언합니다. "b"변수는 0.0으로 초기화되며 함수 "lg"내에 범위가 있습니다. 그리고 "b"는 범위 지정이 그 조건으로 만 제한되면 내부에 선언됩니다. for 루프의 두 번째 매개 변수, 즉 "i == n"도 확인하십시오. 입력 ("n")의 값이 0이 아니라면 항상 "true"가됩니다.

0

오류 1 : i==n : 당신이 for 루프에서 i==n을 비교한다면, 그 루프 만 i<n

오류 2로 해결해야 time.You를 실행합니다 : 당신은 두 번 유형을 반복했다. 루프의 변수 b가 반복을 중지 할 때 루프에서 사라지기 때문에 for 루프에 변수 b를 선언하면 안됩니다. 따라서 for 루프의 변수 b 값에 ​​할당되지 않습니다.

for 루프에서 double 키워드를 삭제해야합니다. 그러면 변수 b가 변경됩니다.