[첫화면으로]Diary/Loop의변수

마지막으로 [b]

/Loop의변수

프로그래밍 질문글들 중에 자주 보이는 게, "구구단을 만들었는데 2단만 출력되고 끝나버려요"더라.
int dan=2, num=1;

while (dan<10)
{
    // 이 지점에서 num=1 로 다시 초기화해야 함
    while (num<10)
    {
        printf("%d x %d = %d\n", dan, num, dan*num);
        num++;
    }
    dan++;
}

이유야 쉽게 알 수 있듯이 안쪽 루프가 다 끝났을 때 num값은 10이고, 그 상태에서 바깥쪽 루프의 다음 반복 시점에서 안쪽 루프 조건이 거짓이 되어 바로 끝나버리기 때문인데...

질문자들 중에 대부분은 저 주석이 있는 위치에서 num을 다시 1로 초기화해주라는 답변을 보면 "아하"하고 넘어가는데, 어떤 사람들은 "왜 저기에 num=1이 있어야 하나요"라고 질문을 한다.

오늘에서야 든 생각인데, 코드의 앞쪽으로 되돌아간다는 것이, 일종의 "시간을 거슬러 올라간다"는 개념으로 받아들여졌을지도 모르겠다. num값 역시 제일 처음 값이었던 1로 되돌아갔을 거라 생각이 들었을 수도? 그러고보면 그런 형태로 만들어진 프로그래밍 언어도 세상 어딘가는 있지 않을까 싶기도 하고...

다만, 그럼 dan은 왜 계속 2로 머물러 있지 않냐는 의문은 안 들까 싶긴 한데 :-)
-- Raymundo 2013-2-7 2:10 am

Comments & Trackbacks

무식한 방법일지 모르지만 저의 경우 펄을 짜다가 예상한 값이 안나오면
각 의심점 마다 값을 출력을 합니다. printf "point 1 : " . "$num" . "\n"; 이런 식으로
그러면 따라가기가 좀 쉽더라구요 특히 루프가 많을 때
-- MindControl 2013-2-7 10:20 am

print 디버깅이야 진리 아닌가요 ^^ 저도 늘 그러는데요
-- Raymundo 2013-2-7 12:11 pm

디버깅 툴에 눌러놓고 gui로 뜬 창에서 breakpoint 가는거 그냥 가만히 보고 참 편한데
perl은 수동.. ㅠㅠ
-- LF 2013-2-17 7:25 pm
이름:  
Homepage:
내용:
 

주인장분류

<<   /2013서버이전 (2013-03-20)[p]   | /Loop의변수 (2013-02-07) |   /퍼즐-화물열차 (2013-01-21)[n]   >>

Diary

최근 글들

코멘트와 트랙백

옛 글들

  • /Archive - 월별로 한번에 보기
  • /List - 전체 포스트 목록

RSS

주요 페이지

이 홈페이지의 인터위키는 다음과 같습니다.
GyparkWiki  UTF-8
https://gypark.pe.kr/wiki/


마지막 편집일: 2013-2-17 7:25 pm (변경사항 [d])
1161 hits | Permalink | 변경내역 보기 [h] | 페이지 소스 보기