(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 답변
-
++연산자는 단독으로 쓰이면 변수값을 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
-
댓글 입력