2014-03-03 1 views
1

함수 선언이 void square(int n) 인 C 프로그램이 있다고 가정 해 봅시다. printf의 제곱 값 n을 모두 수행합니다. 나는 이렇게 bash 쉘에서 실행할 수 있기를 원한다 : square 5, 여기서 5는 C 프로그램에 대한 입력이다.C 프로그램 인수로 직접 쉘 입력

어떻게하면됩니까? getopt, read을 사용해 보았습니다. 매뉴얼 페이지를 여러 번 읽었으며 약간의 getopt 튜토리얼을 보았습니다. 그러나 이것을 수행하는 방법을 생각할 수 없습니다. 예제에서 플래그를 사용하지 않는 getopt의 예제를 찾을 수 없으므로 간단한 정수 입력에 적용하는 방법을 모르겠습니다. 아무도 나와 함께이 작업을 수행 할 수 있습니까? 나는 정말로 감사 할 것입니다.

+3

간단한 단일 인수에 대해 getopt가 필요하지 않습니다. argv/argc : http://crasseux.com/books/ctutorial/argc-and-argv.html –

+0

@MarcB 링크가 매우 유용합니다! 그것은 argc와 argv에 대해 많은 것을 정리했다. 나는 여전히 C에서 초보자이므로, 거기에 링크 된 간결한 정보에 감사한다. ^^ – karysto

답변

7

처리해야하는 다른 명령 줄 옵션이없는 경우 getopt이 과도하게 사용 된 것일 수 있습니다. 당신이 필요로 argv에서 값을 읽을 수 있습니다 :

int main(int argc, char *argv[]) 
{ 
    int n; 

    // need "2 args" because the program's name counts as 1 
    if (argc != 2) 
    { 
     fprintf(stderr, "usage: square <n>\n"); 
     return -1; 
    } 

    // convert the first argument, argv[1], from string to int; 
    // see note below about using strtol() instead 
    n = atoi(argv[1]); 

    square(n); 

    return 0; 
} 

더 나은 솔루션 것이다 변환이 유효 여부를 확인하기 위해 use strtol() instead of atoi().

+0

그리고이 쉘 스퀘어 5 '맞지? –

+2

@FiddlingBits 프로그램이 현재 디렉토리에서'square'라는 실행 파일로 컴파일되면, (프롬프트 또는 쉘 스크립트에서) 실행해야하는 것은'./square 5'입니다. – TypeIA

+0

@dvnrrs 코드 블록이 작동 할뿐만 아니라 의견도 도와 주셔서 감사합니다. 필자는'strtol()'에 대한 맨 페이지를 살펴보고 내 자신의 연습을 위해 대체 솔루션을 만들기 위해 노력할 것입니다. – karysto