2013-08-25 1 views
3

해당 코드를 작업하고 있는데 ++x 대신 x + 1을 사용하려고 시도했으며 결과가 무한 루프 였고 화면에 0이 인쇄되었습니다.for 루프에서 x + 1을 사용할 수없는 이유는 무엇입니까?

이 코드입니다 :

#include <stdio.h> 
int main(void){ 
    int x; 
    for(x = 0; x <= 100; x + 1) //instead of ++x 
    printf("%d\t",x); 
    return 0; 
} 

내가 컴파일러는 오류 ,,,, 어떤 실제로 ?? 일어나는를 생성하지 않은 이유는이 작업을 ..... 궁금! x++x += 1으로 취급된다.

+4

"컴파일러가 왜 그런 오류를 발생시키지 않았습니까?"왜해야합니까? 'x + 1'은 완벽하게 유효한 표현식입니다. 그것은 단지 당신이 원하는 효과가 발생하지 않습니다. 경고가 활성화되어 있으면 내 컴파일러가 경고를 발행합니다. – hvd

+0

이 질문은 코드를 묻는 질문이 아닙니다. 질문자는 특정 코드가 작동하지 않는 이유를 알고 싶어합니다. 초보자가 일부 코드가 예상대로 작동하지 않는 이유를 묻는다면, 더 경험 많은 코더에게 단순 할 수 있습니다. 그러나 초보자는 적어도 뭔가를 시도하고 이유에 대한 이해를 요구하고 있습니다. 내가 그걸 화제로 보지 않니? – verbose

+0

내가 찢어졌다. 이것은 준 정당합니다. 내가 실제로 이해한다고 가정 할 때, 대답은 둘 다 동등하게 유용하다는 것이다. 하지만 이것은 x ++가 x + = 1에 대한 짧은 손임을 설명하는 교과서를 읽는 것이 가장 좋습니다. 나는 여전히 주제를 말할 것입니다. SO 질문이 아닙니다. 책으로 돌아 가라, 청년. –

답변

9

변경하려면 x 값이 필요합니다. 그렇지 않으면 루프가 종료되지 않습니다. x + 1 만있는 경우 반복 끝에 x + 1이 계산되지만 결과 값은 무시됩니다. 표현의 결과는 어떤 장소에도 저장되지 않습니다. 따라서 x은 0으로 유지되고 x <= 100은 true로 유지되고 루프는 영원히 계속됩니다.

다음 중 하나가있는 경우 :

x = x + 1 
x += 1 
x++ 
++x 

x 자체의 값이 증가합니다. 그것이 당신이 필요로하는 것입니다.

5

발현 x + 1, 그래서 정확한 루프에서 x = x + 1 같아야

for(x = 0; x <= 100; x + 1) 
        ^
         doesn't increment x 

무한 루프!

등 :

for(x = 0; x <= 100; x = x + 1) 

또는

for(x = 0; x <= 100; x += 1) // or simply x++ or ++x 

컴파일러

x + 1가 유효한 표현이기 때문에 이러한 오류가 발생하지 않았다 (하지만 당신이 원하는없는 것).

그래서, x += 1, x++ 또는 ++xx에 1을 추가하지 않습니다뿐만 아니라 x의 값을 수정합니다.

1

x의 값이 확실히 증가하기 때문에 접근법이 완벽하지 않지만 할당과 관련하여 실패합니다. 귀하의 진술은 귀하의 모든 요구 사항을 충족시켜야합니다.

#include <stdio.h> 
int main(void){ 
int x; 
for(x = 0; x <= 100; x = x + 1) 
    printf("%d\t",x); 
return 0; 
} 

를 사용하려고하거나 당신은 또한 사전 증가 (++x)를 사용할 수 있습니다

#include <stdio.h> 
int main(void){ 
int x; 
for(x = 0; x <= 100; x++) 
    printf("%d\t",x); 
return 0; 
} 

대신 x++ (사후 증가)를 사용할 수 있습니다. x = x + 1;이라는 표현식은 increment가 포함 된 할당의 약식 메서드 인 x += 1;으로 작성할 수도 있습니다. 다른 연산자를 사용할 수도 있습니다.

x -= 3; 
x *= 2; 
6

for 루프의 기본 구조는 같은 - 비록

for(initialization; condition; increment or decrement) 

그러나 "조건"부분 만이 루프 동작을 제어 처리한다 핵심 부분

. 따라서 다른 두 부분이 구문 상 올바른 경우 컴파일러에서 오류가 발생하지 않습니다.

유효한은 유효한 C 문이며 x의 값은 변경되지 않으므로 [x <= 100 => 0 <= 100]이 영원한 경우 무한 루프가됩니다.

또 다시, x++ 또는 ++x은 각각 독립적으로 사용될 때 x = x + 1으로 처리됩니다. 그러나 x++은 실제로 후 증가 연산자이며 ++x은 사전 증가 연산자입니다. 즉, ++x을 사용하면 x의 값이 먼저 증가한 다음 x에 할당됩니다. 반면에 x의 현재 값은 전체 진술에 x++으로 사용되며 그 다음에 x이 증가하고 새 값으로 지정됩니다. 다음의 예 -

#include<stdio.h> 
    void main() 
    { 
     int x=5; 
    /* Post & Pre-Increment used independently */ 
     x++; 
     printf("x : %d", x); 

     ++x; 
     printf("\nx : %d", x); 

    /* Used with printf() statement */ 
     printf("\nPre-increment of x: %d", ++x); 

     printf("\nPost-increment of x: %d", x++); 

     printf("\nPost-increment effect on x: %d", x); 
    } 

출력 봐 : 아직도 당신이 날 다시 회신 할 수없는 경우

x : 6 
x : 7 
Pre-increment of x: 8 
Post-increment of x: 8 
Post-increment effect on x: 9 

내 설명을 희망은, 당신이 이해 만들었습니다.

관련 문제