2012-06-23 163 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进行适当的错误检查。如果你要转换的argv [2] int与包括stdlib.hatoi()

+1

'的sscanf(argv的[2], “%d”,&米)'也是另一种选择。 –

+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