2012-06-23 7 views
1

내가 C 언어로 비교할 수있는 방법 궁금 비교, 내가 argv[2]에 넣어 번호와 내 코드에 int 번호 :"변수는 argv"와 "INT"변수 (C)

EX: prog.exe file.txt 74 
======================== 

int n; 
scanf ("%d", &n); 

if (n > argv[2]) 
{ 
    [...] 
} 

방법 다른 종류의 데이터를 비교할 수 있습니까?

답변

6

앱에 전달 된 모든 명령 줄 매개 변수는 문자 포인터 (일명 "C 문자열")로 argv에 저장됩니다. 비교하기 전에 수십 가지 방법 (가장 간단한 것은 atoi)을 통해 문자열을 정수로 변환해야합니다.

심각한 생산 코드를 작성하는 경우 오류와 숫자 0을 구별하기가 어렵 기 때문에 atoi을 사용하지 마십시오. 대신 적절한 오류 검사와 함께 strtol을 사용해야합니다. 당신이 atoi()에 대한 stdlib.h 을 포함한 [2] int로는 argv를 변환 할 경우

+1

'sscanf를 (는 argv [2] "가 % d", m)이다. –

+1

다음은 [documentation] (http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/)에 대한 링크입니다. 예, 저는 그것이 C++ 레퍼런스임을 알고 있지만, 그것은 같은 기능입니다. – jpm

+0

@jpm 감사합니다. 그것에 대한 링크로 업데이트되었습니다. –

0

단순히 atoi() 기능을 사용합니다. 이 함수는 단순히 문자열의 첫 번째 숫자 자릿수를 문자열의 비 숫자 멤버를 만날 때까지 변환합니다.

3

매개 변수는 명령 줄에서 문자열입니다. 그들은 각각의 유형으로 변환되어야합니다. 개인적으로, 나는 정수 변수와 atoi를 사용하여 argv [2]를 먼저 풀었다. 입력은 사용자 입력과 같은 비교로 다음 n 값 및`또 다른 옵션

#include <stdio.h> 
#include <string.h> 

int n; 
int argv_2; 

int main(int argc, char *argv[]) 
{ 
    int rc = 0; 

/* Check for three arguments, program name and two passed. */  

    if(3 == argc) 
    { 
     argv_2 = strtol(argv[2], NULL, NULL, 10); 

     printf("Please enter a number for the vaue of the variable n\t: "); 
     scanf("%d", &n); 
     printf("\n\n"); 

     if (n > argv_2) 
     { 
      printf("The value of n: %i is greater than argv[2]: %i\n", 
        n, argv_2); 
     } 
     else 
     { 
      printf("The value of n: %i is not greater than argv[2]: %i\n", 
        n, argv_2); 
     } 
    } 
    else 
    { 
     printf("Usage: ./test arg1 arg2 \n\n"); 
    } 

    return rc; 
} 
+0

argv_2 = atoi (argv [2], 10); "10"은 무엇을 위해 머물러 있습니까? 감사합니다 – Lc0rE

+0

나는 strtol을 사용해야합니다. 나는 오랫동안 C에서 프로그래밍하지 않았기 때문에 atoi가 더 이상 사용되지 않았 음을 알지 못했습니다. http://www.codecogs.com/reference/computing/c/stdlib.h/atoi.php 반영 할 답변을 편집했습니다. – octopusgrabbus