(c언어) 숫자세기 질문 (++) printf문장 밖에 cnt++;로 지정한 경우와 printf("%d",cnt++)경우 결과가 다르게 나옵니다.

조회수 484회

입력한 수만큼 줄과 그에 해당하는 숫자를 카운팅하는 코딩을 하고 있는데요..

예를 들어, 5를 입력하면, 산출이

1

2 3

4 5 6

7 8 9 10

11 12 13 14 15

이런식으로 되는 결과가 산출하는 코딩입니다.

일단 카운트 변수는 cnt로 지정하였습니다.

그런데 printf문장 밖에 cnt++;로 지정한 경우와 printf("%d",cnt++)경우 결과가 다르게 나옵니다.

그 이유가 궁금합니다.

아래는 제가한 코딩입니다.

    int n,cnt=1;
    scanf_s("%d", &n);

    for (int a = 1; a <= n; a++) {
    for (int b = 1; b <= a; b++) {
        printf("%d ",cnt++); //여기에 cnt++를 넣으면 cnt=1로 초기화해야 한다.
    }                        // 그냥 위에 cnt++;로하면 cnt=0이다.
    printf("\n");
    }

그런데 여기서,

    cnt++;
    printf("%d", cnt)

로 할 경우 cnt를 0으로 초기화해야 위의 결과가 나오며,

위에 처럼

    printf("%d ",cnt++);

으로하면 cnt를 1로 초기화해야 위의 결과가 나오는데

어떻게 1의 차이가 생기는지 궁금합니다.

1 답변

  • 좋아요

    2

    싫어요
    채택 취소하기

    ++연산자는 단독으로 쓰이면 변수값을 1 증가시키지만, 단독으로 쓰이지 않고 다른 문장안에 쓰이면 문장의 평가순서에 영향을 줍니다.

    ++연산자는 변수의 앞에 붙이는 경우와, 뒤에 붙이는 경우가 있는데 이때 평가순서가 달라집니다.

    printf("%d ",cnt++);
    

    위의 코드 한줄은 일반적인 컴파일 환경에서 아래의 코드 두줄과 동일하게 처리됩니다.

    printf("%d ",cnt);
    cnt++;
    

    즉, 현재 cnt값을 화면에 출력한 후에, cnt값이 1증가합니다.

    질문에서 printf("%d ",cnt++);코드도 현재 cnt 값이 출력된후 증가되기 때문에 1부터 출력하기 위해서 cnt를 1로 초기화해야 했던 것입니다.

    반면에 질문에서

    cnt++;
    printf("%d", cnt);
    

    였던 경우에는 cnt값이 1증가시킨 후에 cnt를 출력해야하는데 1부터 출력하고 싶으므로 0으로 초기화해야 1증가시킨 후 출력된 값이 1이 되기 때문에, cnt를 0으로 초기화해야 했던 것입니다.

    참고로 printf("%d ",cnt++); 처럼 쓰는 것보다는 오해의 소지가 없도록 아래와 같이 두줄로 작성한 코드가 더 잘 작성한 코드입니다.

    printf("%d ",cnt);
    cnt++;
    
    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 짧다고 좋은 코드가 아니고, 변수 네이밍, 함수 네이밍 등을 잘하여 주석을 최소화하고, 하고자 하는 일이 작성한 코드에서 직관적으로 이해될수 있게 짠 코드가 좋은 코드입니다. 알 수 없는 사용자 2022.10.28 16:04
    • 이야.. 이해했습니다! 대단하세요~~ 감사합니다^^ 배창일 2022.10.28 16:04
    • 넵~ 많이 배우고 갑니다^^ 배창일 2022.10.28 21:17

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)