for 문...실행부가 뒤에 왔는데 왜 printf문이 먼저 실행되는지
글쓴이: jo1413 / 작성시간: 월, 2005/10/24 - 3:02오후
/* c190501.c - for문의 세 가지 형태 */ #include <stdio.h> void main(void) { int a; for(a=1;a<=3;) /* 복문 구조를 이용한 명령 실행 */ { printf("1.복문 형태 : a = %d \n", a); a=a+1; } for(a=1;a<=3;a+=1) /* 실행부를 for문 뒤에 단문으로 붙여서 실행 */ printf("2.단문 형태 : a = %d \n", a); for(a=1;a<=3;printf("3.독립 형태 : a = %d \n", a), a++); /* for문 안에서 명령 실행 */ getch(); }[/b][/b]
여기에서 2번째 단문으로 붙여서 실행이 있잖아요.
1,3번째는 실행부인 a=a+1, a++가 뒤에 나와서 printf문 수행후에 실행이 되는데....2번째는 a+=1인 실행부가 먼저 나오잖아요. 그런데 컴파일 해보면 결과가 똑같이 a=1,a=2,a=3 이렇게 나옵니다... 실행부는 무조건 맨 나중에 실행되는 건가요?
그런데 또...이 보기를 보시면 아니라고 생각되실 거에요;
int a; for(a=0;a<3;a++,printf("3.독립 형태 : a = %d\n", a);
여기는 a++이 먼저 나와서 0+1이 되잖습니까....ㅠㅠ
명쾌한 답변 부탁 드려요..^^;;
Forums:
for문이 원래 그런건데...ㅠ.ㅜ[code]for(a=1;a<
for문이 원래 그런건데...ㅠ.ㅜ
여기서 a+=1은 당연히 printf문 다음에 수행되요...
원래 순서가 그렇게 되는데 어떤 질문을 하신건지...
따라서 첫번째와 두번째 실행결과는 같습니다.
/***************************************************
* 가장 심플한 것이 가장 아름다운 것이다.
***************************************************/
[code:1] for(a=1;a<=3;a+=1)
1,3번째는 a=a+1;, a++ 가 printf문보다 늦게 있잖아요. 그러니까 printf문이 실행되고 a=a+1;, a++가 실행되는걸 알겠는데...
2번째는 a+=1이 printf("2.단문 형태 : a = %d \n", a); 보다 먼저 있는데... 왜 결과가 같냐는 거에요...
제 생각으로는 2번째는 a=2, a=3, a=4가 나와야 할텐데;;
컴파일러가 거짓말 할리는 없고;;;
제가 잘못 생각하는건가요?
------------------------------------------------------------
Get busy living, or get busy dying.
[quote="jo1413"][code:1] for(a=1;a
for(A; B; C) D;
라는 형태의 코드에서, 각 문장(수식)이 실행되는 순서는 A - B - D - C - B - D - C - ... - B - D - C - B - (루프 종료) 순입니다. 당연히 순서가 바뀌어 나와야 정상이죠. (3번의 경우 D에 아무 것도 없고 대신에 C에 두 문장이 한꺼번에 있는 형태니까 C에서 문장이 나온 순서를 따르겠죠)- 토끼군
그냥 익혀야 할 문제일 듯합니다
왜? 라고 고민하시는 것보다는
그냥 그렇게 하기로 한 용법, 약속입니다.
'루프를 한 번 돌고나서 변수를 얼마나 증감할 것인가?' 를 정한 용법.
우라나라말과 영어가 왜 어순이 다를까를 고민하기보다는
그냥 그런 거니까 그렇게 외국말을 배워야하는 것과 마찬가지일 듯 하네요.
네, 답변주신 분들 고맙습니다^^;;[code:1]for
네, 답변주신 분들 고맙습니다^^;;
a-b-d-c 순서로 실행 되는군요.
for문 실행부(c)에는 증감 연산자가 많이 오지만 꼭 그렇지만은 않다고 책에 주의점이라고 나왔어요^^ 그때그때 달라요~~*
------------------------------------------------------------
Get busy living, or get busy dying.
댓글 달기