for 문...실행부가 뒤에 왔는데 왜 printf문이 먼저 실행되는지

jo1413의 이미지

/* 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이 되잖습니까....ㅠㅠ

명쾌한 답변 부탁 드려요..^^;;

lovemyin의 이미지

for문이 원래 그런건데...ㅠ.ㅜ

for(a=1;a&lt;=3;a+=1)      /* 실행부를 for문 뒤에 단문으로 붙여서 실행 */ 
     printf("2.단문 형태  a = %d \n", a); 

여기서 a+=1은 당연히 printf문 다음에 수행되요...
원래 순서가 그렇게 되는데 어떤 질문을 하신건지...

따라서 첫번째와 두번째 실행결과는 같습니다.

/***************************************************
* 가장 심플한 것이 가장 아름다운 것이다.
***************************************************/

jo1413의 이미지

	for(a=1;a<=3;a+=1)		/* 실행부를 for문 뒤에 단문으로 붙여서 실행 */
	  printf("2.단문 형태 : a = %d \n", a);

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.

lifthrasiir의 이미지

jo1413 wrote:
	for(a=1;a<=3;a+=1)		/* 실행부를 for문 뒤에 단문으로 붙여서 실행 */
	  printf("2.단문 형태 : a = %d \n", a);

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가 나와야 할텐데;;

컴파일러가 거짓말 할리는 없고;;;
제가 잘못 생각하는건가요?

for(A; B; C) D; 라는 형태의 코드에서, 각 문장(수식)이 실행되는 순서는 A - B - D - C - B - D - C - ... - B - D - C - B - (루프 종료) 순입니다. 당연히 순서가 바뀌어 나와야 정상이죠. (3번의 경우 D에 아무 것도 없고 대신에 C에 두 문장이 한꺼번에 있는 형태니까 C에서 문장이 나온 순서를 따르겠죠)

- 토끼군

niemand의 이미지

왜? 라고 고민하시는 것보다는
그냥 그렇게 하기로 한 용법, 약속입니다.

'루프를 한 번 돌고나서 변수를 얼마나 증감할 것인가?' 를 정한 용법.

우라나라말과 영어가 왜 어순이 다를까를 고민하기보다는
그냥 그런 거니까 그렇게 외국말을 배워야하는 것과 마찬가지일 듯 하네요.

jo1413의 이미지

네, 답변주신 분들 고맙습니다^^;;

for(A; B; C) D;

a-b-d-c 순서로 실행 되는군요.

for문 실행부(c)에는 증감 연산자가 많이 오지만 꼭 그렇지만은 않다고 책에 주의점이라고 나왔어요^^ 그때그때 달라요~~*

------------------------------------------------------------
Get busy living, or get busy dying.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.