PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2008/09/04 20:10:41
Name EZrock
Subject 소스를 올려봤습니다. 문제점이 있다면 지적 부탁드립니다.
소스의 내용은 커맨드 라인으로 정수를 입력하면 그 정수이하의 최대 소수(prime number)를 찾는 것입니다.

문제점이 있다면 컴파일 단계가 아닌 실행단계 입니다. 실행시에 런타임 에러가 발생하는 이유를 모르겠습니다.

#include <stdio.h>
#include <stdlib.h>

#define MAX_SIZE 20

int main(int argc, char* argv[])
{
        int i,j,n,max_prime,x;

        char n_char[MAX_SIZE];

        for(x=0; x<=MAX_SIZE; x++){
                n_char[x] = argv[1][x]; // argv[0]는 실행할 프로그램 이름 argv[1]은 입력한 정수의 문자열
        }  // 아마 에러가 난다면 여기서 날 확률이 가장 큽니다만 디버깅이 제대로 실행이 되질 않습니다.
                   // 더 좋은 아이디어가 있다면 부탁드립니다.

        n = atoi(n_char);

        for(i=2; i<=n; i++){
                for(j=2; j<i; j++){
                        if(i%j == 0) break;                
                }
                if(i==j) max_prime = i;
        }

        printf("정수 %d까지의 소수중에서 가장 큰 소수는 %d\n",n,max_prime);

        return 0;
}

수정 1. for(x=0; x<=MAX_SIZE; x++){
                n_char[x] = argv[1][x];        
          } 과 n = atoi(n_char)을

바로 n = atoi(argv[1])로 수정하니까 컴파일후 디버그 과정에서 에러가 발생합니다. 결과 도출에는 문제가 없었습니다.

하지만 어느 부분에서건 에러가 안나는 방향으로 잡고자 합니다. 많은 도움 바랍니다.

여기에 추가질문 하나 붙입니다.

C++에서도 커맨드 라인의 입력을 받을 필요가 있을때

메인함수의 패러미터를 저런식으로 쓰는 건지 알려주세요.

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
무한의 질럿
08/09/04 21:25
수정 아이콘
main함수에서 받는 char* argv[]는 1차원 배열인데 for문에서 돌아가는 argv[1][x]가 2차원 배열이군요.
08/09/04 21:31
수정 아이콘
n = atoi(argv[1]); 이렇게 고치면 아무 문제 없어 보입니다...
어떤 부분이 에러인지 알려주시면 찾아보겠습니다. 제 컴파일러는 정상작동하는군요...
그리고 소수중 최대값을 찾는게 목적이라면 큰값에서 거꾸로 소수를 찾다가 처음나오는 소수를 출력하는건 어떨지 생각해 봅니다.
무한의 질럿님// char *argv[]는 사실상 이차원 배열입니다. 문자열의 배열이라서요. 문자열 복사를 위해 argv[1][x]로 한문자씩 카피한것 같습니다. 개인적으로는 strcpy를 추천합니다만, 현재 문제에서는 별 필요가 없군요
무한의 질럿
08/09/04 21:32
수정 아이콘
그냥 복잡하게 할 것 없이 숫자를 받아서 그 숫자(char)를 int형의 변수로 변환한 다음에 for문을 돌려서 2부터 (변수 - 1)까지 쭉 나눠서 0으로 떨어지는 마지막 수를 출력하면 될거 같은데요.
카카달려
08/09/04 21:39
수정 아이콘
어처구니없지만...실행이나 디버깅하실때 인자를 안주고 하신거 아닌가요? 저도 가끔 그런 실수를 하는데...
08/09/04 22:17
수정 아이콘
카카달려님// 커맨드라인으로 넣기 때문에 인자를 줄수가 없습니다. 그리고 인자를 주지 않고 제일 위에 쓴 방법대로 해도 컴파일 및 디버깅때도 에러가 뜨진 않더군요.

물론 에러가 프로그램 실행 불가로 만드는 에러는 아니지만 있으면 좀 그렇잖아요.

tsana님의 컴파일러에서 정상적으로 작동하신다고 하니...

제 컴파일러는 Visual C++ 9.0입니다.

tsana님께서 말씀하신대로 스트링카피를 써서 해봤는데 디버그시에는 에러가 뜨더군요.

이게 argument가 없어서 그렇다면 다행이지만...그런것 같지는 않아서 말이죠.
08/09/04 22:48
수정 아이콘
몇번의 디버깅 시도끝에 역시 문제는 존재하지 않는 인수 argv[1]의 문제 였던것 같습니다.

디버깅시에는...주어질 인수가 없으니 그럴수 밖에 없다는게 증명됐군요.

쓸데없는 고집피워 죄송합니다(_ _)...;;
08/09/05 02:24
수정 아이콘
참고로, 위와 같은 경우에는 다음처럼 에러 처리를 넣어주는 습관을 길러두시는게 좋습니다. ^^

if ( argc != 2 )

// argument 의 개수가 일치하지 않음
printf("Usage: max_prime number\n");
return 1;
08/09/05 17:22
수정 아이콘
project > setting > debug 탭을 보면 argument라는 란이 있습니다. 여기에 쓰시면 인자를 넘길수 있어요..
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
41695 단기간에 여성분에게 스타를 가르쳐주려면 어떻게 해야할까요. [14] NABCDR1855 08/09/05 1855
41694 최근에 제주도 여행다녀오신분.....계시나요... [5] 텍사스전기톱1917 08/09/05 1917
41693 무선공유기 사용자 수 알아내기... [6] Satomi.x23378 08/09/05 3378
41692 동미참훈련 받으러 가는데요... [8] ISUN3008 08/09/05 3008
41690 궁금한 것 몇가지 좀 물어보겠습니다. [5] 라다1746 08/09/04 1746
41689 급질문!! 토요일 올스타전.. 혹시 입장료 받나요?? [3] Carrier_Kim1827 08/09/04 1827
41688 컴퓨터 견적 좀 봐주세요~ [4] on&on2072 08/09/04 2072
41687 중국 상위 5천만명의 GDP를 알고 싶습니다. [2] 랩교2137 08/09/04 2137
41686 내시경에 관한 질문입니다. 급질 ㅠ.ㅠ [8] TheOthers1635 08/09/04 1635
41685 컴퓨터용 의자 추천해주세요. [1] 라이디스2122 08/09/04 2122
41684 인터넷 사용시 이상합니다.. 도와주세요 ㅜㅜ [1] 안나1526 08/09/04 1526
41682 소스를 올려봤습니다. 문제점이 있다면 지적 부탁드립니다. [8] EZrock1697 08/09/04 1697
41681 기발한 프레젠테이션 방법이 있다면 좀 알려주세요! [2] 근성토끼1943 08/09/04 1943
41680 컴퓨터를 하나 살려고 합니다. [6] 바카스1869 08/09/04 1869
41679 파일 공유 프로그램 추천좀해주세요~ [1] TPL1762 08/09/04 1762
41678 피지알의 공대생분들께 몇가지 질문 드립니다. [4] YoORin2137 08/09/04 2137
41677 원가회계에 대해서 아시는분 답변좀.. [2] funnyday1854 08/09/04 1854
41676 일반적인 기본적 플플전좀 알려주세요 ^^; [7] 이프위너1962 08/09/04 1962
41675 다른 프레임의 절대주소 알아내기 Crom2108 08/09/04 2108
41674 그래픽 카드 질문 입니다. (ATI Radeon Xpress 200) [3] Zakk Wylde2483 08/09/04 2483
41673 낮고 부르기 쉬운 노래 추천좀 해주세요... [10] funnyday3618 08/09/04 3618
41672 모기는 사람의 얼굴을 인식할까요? [8] ArtOfakirA2108 08/09/04 2108
41671 일본 웹에 중고물건을 팔 수 있을까요 [3] 라울1932 08/09/04 1932
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로