2012-06-23 1 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

Любые параметры командной строки, переданные вашему приложению, хранятся в argv в качестве указателей на символы (иначе говоря, «C строк»). Вам нужно преобразовать строку в целое число с помощью любого из десятков методов (простейший - atoi) перед сравнением.

Если вы пишете серьезный производственный код, избегайте использования atoi, так как трудно провести различие между отказами и строками, оценивая число 0. Вместо этого вы должны использовать strtol с правильной проверкой ошибок.

+1

'sscanf (ARGV [2], "% d", & м)' и другой вариант. –

+1

Вот ссылка на некоторые [документы] (http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/). Да, я знаю, что это C++-ссылка, но это одна и та же функция. – jpm

+0

@jpm спасибо. Обновлен ссылкой на это. –

0

Просто используйте atoi() функцию, если вы хотите конвертировать ARGV [2], чтобы int с включением stdlib.h для atoi(). Эта функция просто преобразует первые цифры цифр строки, пока не встретит элемент, не являющийся номером строки.

3

Параметры в командной строке строки символов. Они должны быть преобразованы в соответствующие типы. Лично я сначала распакую ваш argv [2] с использованием целочисленной переменной и atoi; ввести введенное пользователем значение в 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