디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

어떡해 일기 #13 :: 첫번째 프로젝트 완료, 그리고 느낀점.

어떡해갤로그로 이동합니다. 2009.12.20 07:34:27
조회 825 추천 1 댓글 6






어떡해 일기는 제가 \'쓸만한 프로그래머\'가 되기까지의 하루하루를 기록해 나갈 것입니다.
이것은 제가 그날 하루동안 프로그래머가 되기 위해 노력한 사항과 에피소드를 만천하에 공개하여,
저 스스로 나태해지지 않도록 채찍질 하기 위함과 동시에 선배님들에게 조언을 구하고자 함입니다.
자유분방한 DC에서 올라가는 글인 만큼 그날의 기분에 따라 존칭, 돌연 막말 등 일관성 없는 말투가 있을 수 있습니다.

길다는 의견이 많아 앞으로는 되도록 일기를 짧게 쓰도록 합니다.
더 많은 형들과 이야기를 공유하기 위해서입니다.

+++++++++++++++++++++++
현재 사용중인 교재+++++++++++++++++++++++++++++

주교재 : 윤성우의 \'열혈강의 C프로그래밍\' (FREE LEC)
부교재 :  BRIAN W. KERNIGHAN , DENNIS M.RITCHIE의 C언어 프로그래밍(대영사)
              세계제일 C언어 시작하기 (베스트북)

1주차 :: 기초 함수, 조건문, 반복문, 변수와 상수 기초 이해.  (완료)

1주차 프로젝트 ::
1주차 프로젝트 :: 가상의 가게에서 물건을 구매하여, 몇개를 구매하고,
                           카드를 쓸것인지 쓴다면 결제액의 일정 금액을 수수료로 제하여 결제하는 프로그램. (완료)


==========================================시작

프로젝트 완료했습니다. (산재해있는 버그는 촘 있지만;;;)

현재 시간 오전 7시... 밤샜네요;

이번 프로젝트를 하면서 많은 것을 경험하고 생각하게 했습니다.

1) 프로그램 코딩에 이르기에 앞서 프로그램의 설계를 먼저 생각하자.

이번에 첫번째 프로젝트를 진행하면서 느낀 것은 대충 요렇게 만들면 되겠지하는 생각에
마땅한 설계도 없이 코딩을 진행하면 좆된다는 거였습니다.

내내 진행하면서 이렇다 할 설계도가 없으니 그때그때 아이디어를 짜내서 코딩을 하는데
두줄 코딩하면 한줄은 버그더군요.
무엇보다도 코드 자체가 지니고 있는 로직이 상당히 허술하게 됩니다.

디버깅하면서 무한루프 현상을 몇번 경험했는지 모르겠네요.

다음 프로젝트때에는 코딩에 앞서 설계도를 작성하고 시작해야겠습니다.
비록 코딩에 들어가는 시간은 늦다 느껴질지 모르나, 결과적으로 시간적으로나 로직의 정교함은 비교할 수 없을 거라고 생각합니다.

2) 코딩하면서 내가 뭘 쓰는지 알고는 쓰자. 그리고 모르면 공부하자.

이런 버그가 있었습니다.
for문 내부에 scanf 함수를 적용했을 때, 초반에 scanf를 통해 입력되는 매개변수 값에 쓰레기값이 들어가서
매개변수 값을 판단하는 if 문을 그냥 통과.
두번째 반복되었을 때야 비로소 scanf를 통해 제대로 된 값이 입력되어 if 문에서 판독을 하게되는...

종료 문장이었는데.

종료하겠습니까?
종료하겠습니까? y

이런 식으로 반복되더군요.

이게 왜 이러는지 몰랐는데 알고보니 scanf에서는 스페이스바나 엔터키 등의 입력까지도 매개변수에 값으로 입력시켜버리더군요.
그러니 첫번째 값에서 if문이 의도한 값을 판독할 수 없게되는 거죠.
이때 세브횽, 유리한 횽, sloth 횽 등 많은 분들이 댓글로 fflush(stdin)쓰지말고 해결하라고 주문을 하셨고.
더불어 gets()라는 함수를 알려주셨습니다.
처음에는 gets)와 sscanf로 scanf를 대체해나갔습니다. 얼라.. 근데 신기하게도 내가 작성한 코드에서는 gets()나 scanf나 똑같은 현상 발생(젝일)
그래서 어떻게 할까 계속 고민하고 검색하다가, 쓰지말라는 fflush(stdin)이 키보드 버퍼를 비워준다는 이야기를 발견하고 썼는데.
네, 잡히긴 잡혔는데 이거 원래 쓰면 안된다. (미안합니다;)  <-일단 표준코드가 아니고, fflush는 입력이 아니라 출력관련 함수다. 자세한 사항은 더 알아봐야 하겠지만, 간단한 프로그램 이외에는 입력버퍼를 비우는 용도의 fflush는 프로그램의 작동 안정성을 보장할 수 없답니다.

많은 횽들에게 질책의 소리를 듣고 머리를 싸매고 있는데, 얼라료. 바로 코앞에 scanf 함수 하나가 반짝이고 있다;
그리고 그걸 gets(), sscanf()로 바꾸니 문제없이 작동.

아... 결국 내가 바보였군;
프로그램을 작성하면서 찾아볼 수 있는 편법은 생각외로 많은 것 같다.
하지만 일단 나는 배우는 입장이고, 또 좀 더 넓게 본다면 편법 보다는 정공법이 좀 더 안정적이고 정교한 프로그램을 짤 수 있는 비법이다.
모르면 공부하자. 이것저것 간단하다고 편법만 가져다쓰면 지금은 좋을지 모르나 몇년후엔 죽도밥도 안되는 어중이 떠중이가 되고만다.
자숙합시다.

그리고 공부하자. 내가 쓰는 함수가 어떤 의미를 가지고 있는지. 그리고 어떤 결과를 가지고 어떤 과정을 거치는 지.
이번 scanf 건도 그랬고, gets()도 그랬다. 횽들이 알려주는 귀중한 조언을 듣고 그것을 코드에 적용했을 때.
안된다면 투덜되지 말고 내 코드를 보자. 99.9%는 내 코드에 문제가 있는 것이다. 0.1%는 횽들 오타.


3) 마지막으로...

개인적으로 진행한 자유프로젝트였고, 또 만들어진 프로그램도 여전히 버그가 산재해있지만.
이번 이틀간 프로젝트를 진행하면서 재미도 많이 느꼈고, 또 부족함도 느꼈다.
끊임없이 공부해야겠다.

그리고 엄청나게 더럽고 조잡한 코드지만, 제가 프로젝트를 진행한 프로그램과 소스를 공개합니다.
마구 욕해주세요;

그래도 이 다음에는 이것보다는 잘 만들 수 있다는 자신감은 붙었네요;;

그럼 여러분 수고하세요.

모두들 감사했습니다;

전 졸려서 이만 들어가렵니다;





추천 비추천

1

고정닉 0

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 이혼하고 나서 더 잘 사는 것 같은 스타는? 운영자 24/07/08 - -
165028 전문학사, 학사 학위 학점은행제 등록 !! [2] 99(115.92) 10.01.03 181 0
165027 허허 주말에도 여기서 빌빌 거리는 잉여들은 봐라 [10] 숙신갤로그로 이동합니다. 10.01.03 159 0
165026 시방새 뉴스에서 취업하려면 스팩보다 자기만의 독특한 걸 살리라네... [4] 물속의다이아갤로그로 이동합니다. 10.01.03 152 0
165025 형들아 나 개솜질 하다 질려서 또 왔엉ㅋ [4] 임수서룬뫼갤로그로 이동합니다. 10.01.03 141 0
165024 그냥 뻘글인데요. 유리한 횽아가 아까 리플로 링크해준거 있잖아. [7] 형들아(220.73) 10.01.03 127 0
165023 어제 휘팍 백야타임 [2] 고추장불고기갤로그로 이동합니다. 10.01.03 91 0
165022 새해에는 [4] 제로리플(118.36) 10.01.03 95 0
165021 문주누나 [3] 양희철갤로그로 이동합니다. 10.01.03 124 0
165020 병신들아 난 1월1일 새벽에 [6] 유리한갤로그로 이동합니다. 10.01.03 148 0
165019 허허 맥도날드 시켜 먹으려 했는데 [20] 양희철갤로그로 이동합니다. 10.01.03 224 0
165018 아 ㅅㅂ 형들 축하해줘 ㅋㅋㅋ 드디어 달팽이 배열 풀었어 ㅋㅋㅋㅋㅋㅋㅋㅋ [15] 형들아(220.73) 10.01.03 291 0
165017 DX 하려고 하는데 MFC 배워야해? [14] 양희철갤로그로 이동합니다. 10.01.03 181 0
165015 이곳은 [4] KernelPanic갤로그로 이동합니다. 10.01.03 95 0
165014 횽들 대학생도 프로그래밍 하려면 노트북 사양 좋은거로 사야만 되는거야 ? [7] 링가링가링(119.69) 10.01.03 446 0
165013 새해부터 한짓. [2] KernelPanic갤로그로 이동합니다. 10.01.03 73 0
165012 Dalvik도 JVM? [1] 아잉따잉갤로그로 이동합니다. 10.01.03 115 0
165011 같이 일하기 싫은 유형 [11] 목이삐끗갤로그로 이동합니다. 10.01.03 297 0
165010 ㅋㅋㅋ [3] 숙신갤로그로 이동합니다. 10.01.03 71 0
165009 방문자가 없어서, 강좌 글보기를 로그인 사용자로 바꾸었더니 [6] Vita500갤로그로 이동합니다. 10.01.03 137 0
165008 병신드라 난 1월 1일 새벽부터 여자사람이랑 [1] ㅇㅇㅃ갤로그로 이동합니다. 10.01.03 146 0
165007 영상 편집용 컴 모가 좃을까? [7] 오사카(221.153) 10.01.03 148 0
165006 대학원가려면 어떻게 준비해야하나요? [6] ㅁㄴㅇㄹ(121.185) 10.01.03 276 0
165005 컴고수님들 제발 ㅜㅜ 헬프!! [7] 부탁드립니다(125.131) 10.01.03 105 0
165004 병신드라.. 난 남자사람이랑 1월1일 아침부터 [7] MoonJu(211.115) 10.01.03 158 0
165003 C# 공부할려고 하는데요. 관련 커뮤니티 추천 부탁합니다. [4] 꽃미남오티즈갤로그로 이동합니다. 10.01.03 158 0
165002 오오 역시 구석횽이 본좌인듯 카이신갤로그로 이동합니다. 10.01.03 106 0
165001 형들 질문좀;; [2] (110.12) 10.01.03 113 0
165000 카이신은 봅니다. [2] rntjr갤로그로 이동합니다. 10.01.03 112 0
164999 횽들 개블리닷컴같은거 만들려면 [6] 러러(112.158) 10.01.03 117 0
164998 59.20.252.57 가 어딜까? [1] rntjr갤로그로 이동합니다. 10.01.03 100 0
164997 구석횽 [14] 카이신갤로그로 이동합니다. 10.01.03 127 0
164996 하하하는 봅니다. [2] rntjr갤로그로 이동합니다. 10.01.03 146 0
164993 아주아슬횽은 봄.니.다. [7] 물속의다이아갤로그로 이동합니다. 10.01.03 126 0
164992 형님드라.. 난 여자사람이랑 1월 1일 부터... [5] 형들아(220.73) 10.01.03 178 0
164990 병신드라.. 난 여자사람이랑 1월1일 저녁부터+그녀인증 [7] Vita500갤로그로 이동합니다. 10.01.03 251 0
164989 병신드라.. 난 여자사람이랑 1월1일 아침 7시 35분에 해뜨는거 [5] rntjr갤로그로 이동합니다. 10.01.03 181 0
164986 갑자기 왠 여자 떡밥이야? [18] 아주아슬갤로그로 이동합니다. 10.01.03 210 0
164984 여자라고 주장하는 늅들은 봄.니.다. [4] 물속의다이아갤로그로 이동합니다. 10.01.03 132 0
164983 여자가 신기한가??? [5] Q Lazzarus갤로그로 이동합니다. 10.01.03 147 0
164982 여자 인증 관련 논쟁 쓰레드 [6] Heart갤로그로 이동합니다. 10.01.03 224 0
164980 네이버메일도 IMAP지원 [5] Vita500갤로그로 이동합니다. 10.01.03 194 0
164979 현금 인출기 만들기. [6] 엘티케이갤로그로 이동합니다. 10.01.03 247 0
164978 듣보잡. 자바 [16] 엘티케이갤로그로 이동합니다. 10.01.03 270 0
164976 자바스트립트좀 하시줄아시는분 계시나요...... [8] 123(222.105) 10.01.03 126 0
164975 형들. 여기 병신 하나 좀 구제해줘요 ㅠㅠ 진짜 모르겠어서 ㅠㅠ [12] 형들아(220.73) 10.01.03 198 0
164973 학원다니는게 토나옴 [10] NaCl갤로그로 이동합니다. 10.01.03 298 0
164972 지금 살맛납니다 보고 있는데 이거 존니 짱임ㅋ [2] 오사카(221.153) 10.01.03 141 0
164971 STL, MFC, ATL, COM 을 정리하면서 느끼는 것... [6] 가난한플머(121.139) 10.01.03 258 0
164970 개블리 닷컴은 원리가 무엇인가요? [2] 러러(112.158) 10.01.03 103 0
164969 어차피 오늘 정전일꺼잖아.swf [2] 숙신갤로그로 이동합니다. 10.01.03 124 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2