이게 왜 안돼는거예요

stargt의 이미지

#include <stdio.h>

void swap(int *, int*);
void sum(int, int);

main()
{
      sum(1, 5);
      sum(10, 5);
      sum(1, 10);
      sum(2, 2);
}

void swap(int *a, int *b)
{
     int temp;
     temp = *a;
     *a = *b;
     *b = temp;
}

void sum(int min, int max)
{
     int i, n;
     
     if(min > max)
            swap(&min, &max);
            
     printf("%d", min);
     n = min;
     for(i = min+1; i = max; i++){
           printf("+%d", i);
           n += i;
     }
     printf("=%d\n", n);
     printf("%d에서 %d까지의 합은 %d\n", min, max, n);
} 

책보고 똑같이 따라헀는데(한글자도 틀림없이요) 실행하면

+5+5+5+5+5+5+
.......

이렇게 무한 루프가 나버립니다. 책그대로 따라했는데 뭐가 문제인가요

저자는 볼란드 컴파일러를 사용하고 저는 gcc썼습니다

Kroisse의 이미지

Quote:
     for(i = min+1; i = max; i++){
           printf("+%d", i);
           n += i;
     } 

비교 부분에서 max를 i에 대입하는 일 말고는 아무런 비교도 하지 않는군요 :wink:

stargt의 이미지

;;;

그러면 저자는 어떻게 원하는 대로 컴파일이 되었을까요... 컴파일러 차이인가요? 어떻게 해결하지;

#include <stdio.h>

int main()
{
while(1)
printf("0");
return 0;
}

Prentice의 이미지

오타겠죠. i<=max 가 아니었을까요?

for (시작하기 전에 한 번 실행 ; 이 부분인 거짓이면 중단 ; 한 번 되풀이할 때 마다 실행)
{매번 되풀이 되는 부분 }

i=max는 위 실행 내용대로라면 절대로 거짓일 수 없어서 무한루프에 빠지는 것입니다.

Kroisse의 이미지

stargt wrote:
;;;

그러면 저자는 어떻게 원하는 대로 컴파일이 되었을까요... 컴파일러 차이인가요? 어떻게 해결하지;

좋은 프로그래머라면 문제가 생겼을 때 제일 먼저 자신을 의심해야 하는 거예요.
비교 연산자(==, <=, >=, !=)가 아닌 대입 연산자(=)를 썼는데 잘 될리 만무하잖아요. :wink:

monpetit의 이미지

Kroisse wrote:
stargt wrote:
;;;

그러면 저자는 어떻게 원하는 대로 컴파일이 되었을까요... 컴파일러 차이인가요? 어떻게 해결하지;

좋은 프로그래머라면 문제가 생겼을 때 제일 먼저 자신을 의심해야 하는 거예요 :wink:


책에 오탈자가 생겼을 수도 있잖습니까. =)
stargt의 이미지

i<=max 하니까 돼네요 ㅡㅡ

책에는 확실히 i=max ...

이거 지금 오타 10번째 발견하는거군요;

#include <stdio.h>

int main()
{
while(1)
printf("0");
return 0;
}

Prentice의 이미지

책을 바꾸시면 어떨까요;;;

참고로 어떤 책의 경우는 책 원고 내용을 모두 직접 시험해보았다고 서문에 적혀있습니다. (제목은 생략합니다.8))

bus710의 이미지

검은해 wrote:
책을 바꾸시면 어떨까요;;;

참고로 어떤 책의 경우는 책 원고 내용을 모두 직접 시험해보았다고 서문에 적혀있습니다. (제목은 생략합니다.8))

혹시 서평에 어떤 독자 분이 '저자의 사진이 너무 많이 나와서 난감하다'라고 토로한 책을 쓰신 저자 분의 다른 책을 말씀하시는 건가요??? 8)

여하튼, 그렇기 때문에 조엘씨는 비교 연산자를 사용 시에 변수를 이퀄의 오른쪽에 두길 권하고 있습니다.

if ( a == 0 )

보다는

if ( 0 == a )

라고 적는다면 최소한

if ( a = 0 )

과 같은 실수는 금방 잡아내겠죠.... (사실 저도 이런 실수를 많이하곤 합니다;; )

life is only one time

Prentice의 이미지

아뇨, 두 분이 쓰신 책을 말한 것이었습니다. (^^;)

좋은 책이긴 한데, 어쩌면 제가 포인터를 이해하기 위해 몇 년이 걸린 것은 이 책 때문일지도 모릅니다.

min2to의 이미지

역시 포인터가 원수임.. ㅠ,ㅠ

모르는건 물어보라구 엄마 아빠가 알려주셧습니다
고수님,선배님들 도와주십쇼 독학하는 학생입니다

댓글 달기

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 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.