<div><span class="hljs-tag"></span> //check_KIN에 문제있음</div> <div>#include <stdio.h><br>#include <stdlib.h><br>#include <time.h><br>#pragma warning(disable:4996)<br>void Test_NUM(int a[], int *bn, int *sn);<br>int check_KIN(int a[]);<br>void print_NUM(int a[], int b);</div> <div>void main()<br>{<br> int T, K;//전체,KIN퍼센트<br> int num[5] = { 0 };<br> int MAX_K, ck = 0;//kin 체크<br> int i, j;//반복문 전용 변수</div> <div> printf("T (Number of test) : ");<br> scanf("%d", &T);<br> printf("KIN %% : ");<br> scanf("%d", &K);<br> MAX_K = ((T*K) / 100);<br> if (((T*K) % 100) > 0)//반올림<br> MAX_K++;</div> <div> printf("%d\n", T);<br> srand(time(NULL));</div> <div> for (i = 0; i < T; i++)<br> {//첫째로 수 랜덤으로 받기<br> for (j = 0; j < 5; j++)<br> num[j] = (rand() % 10 + 1);<br> //둘째로 랜덤으로 받은 수가 KIN인지 확인<br> while ((MAX_K - ck) >= (T - i + 1))//필요KIN >= 남은 횟수<br> {<br> if (check_KIN(num) == 1){<br> break;<br> }<br> else{<br> for (j = 0; j < 5; j++)<br> num[j] = (rand() % 10 + 1);<br> }<br> }<br> if (check_KIN(num) == 1){<br> ck++;<br> print_NUM(num, check_KIN(num));<br> }<br> else<br> print_NUM(num, check_KIN(num));<br> }<br>}</div> <div>void Test_NUM(int a[], int *bn, int *sn)<br>{<br> int score[3] = { 0 };<br> int i, bnum, snum;<br> int j = 0, zc = 0;// 점수구하기용 변수</div> <div> //첫째로 큰수 작은수 가려서 빼기<br> bnum = a[0];<br> snum = a[0];<br> for (i = 0; i < 5; i++)<br> {<br> if (bnum < a[i])<br> bnum = a[i];<br> if (snum > a[i])<br> snum = a[i];<br> }<br> //첫째 큰수 빼기<br> for (i = 0; i < 5; i++)<br> {<br> if (a[i] == bnum){<br> a[i] = 0;<br> break;<br> }<br> }<br> for (i = 0; i < 5; i++)<br> {<br> if (a[i] == snum){<br> a[i] = 0;<br> break;<br> }<br> }<br> //현재 0 2개 남은수 3개<br> //둘째로 점수 구하기 단 큰수-작은수가 4 이상이면 KIN출력<br> for (i = 0; i < 5; i++)<br> {<br> //삭제하여 0이 된 num거르기<br> if (zc != 2){<br> if (a[i] == 0)<br> zc++;<br> else<br> score[j++] = a[i];<br> }<br> else<br> score[j++] = a[i];<br> }<br> bnum = score[0];<br> snum = score[0];<br> for (i = 0; i < 3; i++)<br> {<br> if (bnum < score[i])<br> bnum = score[i];<br> if (snum > score[i])<br> snum = score[i];<br> }<br> bn = &bnum;<br> sn = &snum;<br>}<br>int check_KIN(int a[])<br>{<br> int *bn = NULL, *sn = NULL;<br> Test_NUM(a, bn, sn);</div> <div> if (*bn - *sn >= 4)<br> return 1; // KIN<br> else<br> return 0; // OK<br>}<br>void print_NUM(int a[], int b)<br>{<br> int i;<br> if (b == 1) printf("KIN : ");<br> else printf("OK : ");</div> <div> for (i = 0; i < 5; i++)<br> printf("%d ", a[i]);</div> <div> printf("\n");<br>}<br>일단 코드는 이것입니다 컬러스크립터가 안되서 이렇게 올립니다 ㅠㅠ</div> <div> </div> <div>문제라고 생각하는 부분은 check_KIN인데요</div> <div> </div> <div>디버깅 해본 결과 의문점이 몇개 있어서 질문드립니다.</div> <div>1. 배열 인자를 받을때</div> <div> <div style="text-align:left;"><img style="border:;width:495px;height:626px;" alt="캡처.PNG" src="http://thimg.todayhumor.co.kr/upfile/201504/14293341375BLXY7MyoUPZ4jzzZfhcHbhNM3m.png"></div></div> <div> </div> <div> <div style="text-align:left;">이 부분인데 여기서 int a[]는 num배열입니다(rand로 1~10사이의 값을 받게 되어있는 배열)</div> <div style="text-align:left;">실행은 check_KIN(num); 이렇게 했습니다.</div> <div style="text-align:left;">그런데 디버깅시에 값을 펼쳐보니 달랑 5만 나오네요...?</div> <div style="text-align:left;"> </div> <div style="text-align:left;">2.Test_NUM에서 변수바뀜</div> <div style="text-align:left;">제가 원하는게 *bn,*sn을 null로 초기화 -> tset_num실행 </div> <div style="text-align:left;">마지막에 bn = &bnum; sn = &snum;을 해서 값을 받아오는겁니다.</div> <div style="text-align:left;">이렇게 값을 받아와서 KIN여부를 확인해야 되는데...</div> <div style="text-align:left;">문제는 여기서 중단이 뜹니다..</div> <div style="text-align:left;"> </div> <div style="text-align:left;">으으 제가 포인터를 잘못 쓴건가요? 아님 함수를 잘못쓴건가요? ㅠㅠ</div> <div style="text-align:left;">그리고 혹시 컬러스크립터 말고 다른 코드정리 사이트 올려주시면 코드 세탁해서 댓글로 올리겠습니다.</div> <div style="text-align:left;">이거때문에 3시간동안 끙끙앓았어요 ㅠㅠ</div></div>
<a href="http://steamcommunity.com/id/zpq456/">http://steamcommunity.com/id/zpq456/</a>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.