Diary/Loop의변수 페이지의 소스 보기
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: Diary/Loop의변수 는 읽기 전용 페이지입니다.
#TEMPLATE [[Diary/DynamicTemplate]]
== [[/Loop의변수]] == 프로그래밍 질문글들 중에 자주 보이는 게, "구구단을 만들었는데 2단만 출력되고 끝나버려요"더라. {{{#!vim c 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로 머물러 있지 않냐는 의문은 안 들까 싶긴 한데 :-)
===== Comments & Trackbacks ===== 무식한 방법일지 모르지만 저의 경우 펄을 짜다가 예상한 값이 안나오면 \\ 각 의심점 마다 값을 출력을 합니다. printf "point 1 : " . "$num" . "\n"; 이런 식으로 \\ 그러면 따라가기가 좀 쉽더라구요 특히 루프가 많을 때
: print 디버깅이야 진리 아닌가요 ^^ 저도 늘 그러는데요
디버깅 툴에 눌러놓고 gui로 뜬 창에서 breakpoint 가는거 그냥 가만히 보고 참 편한데 \\ perl은 수동.. ㅠㅠ
---- [[주인장분류]]
Diary/Loop의변수
페이지로 돌아가기 |
다른 수정본 보기