PGR21.com
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다.
통합 규정을 준수해 주십시오. (2015.12.25.)
Date 2024/07/10 00:22:10
Name 마지막처럼
File #1 C언어trouble.png (161.1 KB), Download : 674
Subject [질문] C언어 독학(초보)중인데 다음 코드에 뭐가 문제일까요?


어떤 수 N을 넣었을때 소인수 분해를 시켜주는 함수 soinsu를 만들어서,
예를 들면  제가 268을 넣었을때

---------------
당신이 넣은 수 268의 소인수 분해 form 은 2 * 2 * 67 입니다.
---------------

라고 출력을 하고 싶어서,
첨에는 printf로 한 문장으로 표현하려고 했는데 아예 문장의 내용이 다 씹히고 2 * 2 *67만 나왔구요, 그래서 각각 문장을 분해해서

printf("당신이 입력한 수 %d의 소인수 분해 form = ", input);
soinsu(input);
printf("입니다.);

라고 할려고 했는데 함수가 들어간 부분의 다음 부분은 아예 실행이 안되네요.
( 결과가
-------
당신이 넣은 수 268의 소인수 분해 form = 2 * 2 * 67
-------
여기까지만 나오고 뒤의 입니다는 안나옵니다.


제 짧은 지식으로는 도저히 원인을 알 수가 없어서 이렇게 질문 드립니다.

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
소주파
24/07/10 00:32
수정 아이콘
C는 잘 못합니다만.... for(;;)면 무한반복이라 대신에 소인수분해가 종료되는 조건이 들어가야 될 겁니다. while (N > 1) { 로 바꾸면 어떨지요?
24/07/10 00:34
수정 아이콘
디버깅에 대해 알아보실 딱 적절한 타이밍 같아요.
21번줄에 브레이크포인트를 잡는 법을 알아보시고, 디버그 모드로 실행하는 법을 알아보시고, 한줄 한줄 실행하는 법, 함수 호출하는 줄에선 함수 내부로 디버깅을 타고 들어가는법
을 알아보셔서 내 코드가 한줄 한줄 어떻게 돌아가는지 파악하시고 나면
문제점이 보이실겁니다.
갤럭시S24
24/07/10 02:30
수정 아이콘
(수정됨) 맨 밖의 무한 for(;;) 문은 내부 for 문의 break 로는 나갈 수 없습니다.
이 부분이 님의 코드가 67에서 멈춘 이유입니다.

그 아래 break는 else 문 안쪽으로 이동하시고요. 이것 때문에 밖의 무한 for(;;)와 연계되어
2*2*67까지는 나온 것이긴 합니다만 for문을 두 개 쓰기보다 한 개만 쓰고 종료될 시점에 break를 쓰는게 좋습니다.
else 문 안쪽인 이유는 n이 i로 나누어 떨어졌을 떄 n이 i인 경우는 마지막 소수이기 때문입니다.

그리고 맨 아래 i = 2 로 하면 알고리즘 연산 상 시간 낭비 비효율적인 코드입니다.
i-- 로 바꿔주셔야 합니다. 이로 인해 외부 for(;;)는 없어도 계속 연산이 가능하고요.

따라서 for 문을 아래와 같이 바꾸면 정상 작동할 것입니다.


for (let i = 2; i<= n; i++) {
 if (n % i == 0) {
  if (n != i) printf("%d * ", i);
  else {
   printf("%d", i);
   break;
  }
   n = n/i;
   i--;
 }
}
24/07/10 09:13
수정 아이콘
답변은 윗분들이 잘 해주셨고, 별개로 이런 질문은 AI가 기가막히게 답해줍니다.
질문 많이 하시는거 아니면 무료버전으로도 충분합니다.
ChatGPT나 Claude.ai 써보세요
아래는 Claude 답변입니다.

[네, 이 코드의 주요 문제점들을 해결하는 방법을 설명해드리겠습니다:

무한 루프 문제:
soinsu 함수의 무한 루프로 인해 마지막 printf가 실행되지 않습니다. 이를 해결하기 위해 적절한 종료 조건을 추가해야 합니다.
함수 반환값 미사용:
soinsu 함수가 의미 없는 0을 반환하고 있습니다. 이를 void 함수로 변경하거나, 유용한 정보를 반환하도록 수정해야 합니다.
비효율적인 알고리즘:
현재 알고리즘은 불필요한 반복을 수행합니다. 최적화가 필요합니다.
출력 형식:
마지막 인수 뒤에 불필요한 '*'가 출력되는 문제가 있습니다.

이러한 문제점들을 해결한 개선된 코드는 다음과 같습니다:
(수정 코드 생략...)]
43년신혼1년
24/07/10 11:28
수정 아이콘
위 코드를 그대로 사용하고 싶으시다면
else {
printf("%d", i);
return 0;
}
이렇게 하면 마지막 숫자를 출력한 뒤 함수에서 벗어나게 됩니다.
GregoryHouse
24/07/11 09:26
수정 아이콘
break 관련된 부분은 윗분들이 설명해주셨고
소인수분해 자체의 구조를 개선하시는 게 좋습니다
이 경우에는 for문보다 while문이 보다 유용할 수 있습니다
아래 코드는 예시입니다.

int div=2
while(n>1)
 if(n%div==0)
   //출력관련구문
   n =n/div;
 else
   div++;
마지막처럼
24/07/11 21:15
수정 아이콘
답변 주신 분들 감사합니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
181069 [질문] 쿠팡 가격 오류에 대한 해결 방법 [3] 삭제됨2095 25/07/07 2095
181068 [질문] 요즘 턱이 너무 아픈데, 서울 턱관절 치과병원 추천 부탁드립니다. [9] 독각1929 25/07/06 1929
181067 [질문] 나트랑, 다낭 어디를 더 추천하시나요? [23] 깔끔하게3086 25/07/06 3086
181066 [질문] 주말에 뭘 하시나요? [39] 깃털달린뱀4555 25/07/06 4555
181064 [질문] 서울 송파구 주변 양념돼지갈비 맛집 추천 부탁드려요 [19] 오월의날씨3041 25/07/06 3041
181063 [질문] 등뒤 견갑골(능형근) 쪽 통증이 낫질 않습니다 [7] stoi3156 25/07/06 3156
181062 [질문] 이 곤충 뭔지 아시는분? [6] Right4022 25/07/05 4022
181061 [질문] 에어컨 몇평짜리 살지 조언을 구합니다 [12] 고민시3317 25/07/05 3317
181060 [질문] 주차하다 긁었을 때 후속대처 [12] 참치등살간장절임3356 25/07/05 3356
181059 [질문] 책만 넣고 다니는 저렴한 가방 있을까요? 5만~20만 [10] 라온하제2922 25/07/05 2922
181058 [질문] 피로회복제 추천 부탁드립니다 [44] 깔끔하게4660 25/07/04 4660
181057 [삭제예정] 스타벅스 아메리카노 쿠폰 필요하신븐 [7] 삭제됨3017 25/07/04 3017
181056 [질문] 게시물 올릴 때 유튜브 주소만 나오게 하려면 어떻게 해야 하나요? [1] 카페알파3110 25/07/04 3110
181055 [질문] 염색샴푸에 대한 질문 및 추천 부탁 드립니다. [8] Love.of.Tears.2942 25/07/04 2942
181054 [질문] MSI 중계보는데 옆에 꽃 표시는 뭔가요????? [4] bifrost5434 25/07/04 5434
181052 [질문] 크로스핏, 복싱체육관 질문합니다. [14] 보아남편2650 25/07/04 2650
181050 [질문] 엑스박스 발로란트 질문입니다. [1] 바람의 빛2983 25/07/03 2983
181049 [질문] 아이폰/아이패드 상단바 부분 누르면 스크롤 최상단으로 올라가는 거 끄는 법이 있나요? [2] liten2476 25/07/03 2476
181048 [질문] 러시아어를 배우려고 하는데 왕초보라서 어떤 책을 봐야 할지 모르겠는데 교재 좀 추천해주세요. [3] 미키맨틀2279 25/07/03 2279
181047 [질문] 둘중 한명의 선수로 살아볼수 있으면 누가 더 매력적이세요? [26] 마르키아르3380 25/07/03 3380
181046 [삭제예정] 바르셀로나 vs FC서울 경기 티켓 구하시는분 있을까요? [4] 삭제됨2260 25/07/03 2260
181045 [질문] [사진첨부] 해당 나무의 이름이 뭘까요..? [1] 해버지1615 25/07/03 1615
181044 [질문] 원피스는 만화와 애니가 동시 진행일까요? [7] 회색사과1645 25/07/03 1645
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로