2012-06-20 44 views
1

在我的程序中,我输入int值到argv[1]。我需要把if声明是这样的:int和argv之间的比较

num = 3;  
if (argv[1] == num) 
{ 
    [...] 
} 

我得到一个警告:comparison between pointer and integer [enabled by default]
如何比较这两个值?

+1

你需要将字符串解析为一个'int'。 – Mysticial

+1

C中没有矢量吗?你的意思是数组吗? – wildplasser

回答

0

您可能需要使用各种方法从argv [1]中读取一个数字,然后与num进行比较。 (S * scanf函数)

一说是最具体的给你:http://pubs.opengroup.org/onlinepubs/7908799/xsh/strtol.html

或者打印张数转换为字符串,并做argv的一个STRCMP [1](S * printf的)

+0

如何将“num”转换为字符串? – Lc0rE

+0

'int argnum = strtol(argv [1],NULL,10); if(num == argnum){}' –

+0

'char tmp [8];的sprintf(TMP, “%d”,NUM);如果(strcmp(argv [1],tmp)== 0){}' –

1

的命令行参数字符串。您需要首先使用atoi(不建议)或strtol/strtoul(更好,具有错误处理)来转换这些字符串,然后使用转换后的值与任何要比较的整数进行比较。

char *endptr; 
errno = 0; 
long int n = strtol(argv[ i ], &endptr, 10); 
if (endptr == argv[2]) 
    ...; /* no conversion */ 
else if (*endptr != '\0') 
    ...; /* conversion incomplete */ 
else if (errno == ERANGE) 
    ...; /* out of `long int''s range */ 
... 
+0

如何在这种情况下使用“strtod”函数?比你非常多 – Lc0rE

+1

@ user1409641:'strtod'用于将字符串转换为浮点数。这是一个错字。我修复了错字。使用'strtol'或'strtoul'(后者用于'unsigned'整数)。为您添加了一些代码,以便开始使用。 – dirkgently

1
num = 3;  
if (atoi(argv[1]) == num) 
{ 
    [...] 
} 
+0

atoi有错误报告问题。坚持strtol。 –

3

记住argv,它被传递到main,是的阵列。

您可以将字符串转换为具有atoistrtol(后者是首选替代方法)等功能的整数。或者你将整数转换为一个字符串,并做一个strcmp

+0

“strtod”和“strtol”之间的区别?非常感谢 – Lc0rE

+0

@ user1409641'strtol'将一个字符串转换为一个整数('long')类型,而'strtod'转换为一个浮点('double')类型。 –

2

num是一个整数,而argv[1]是一个字符串,可能(或可能不)代表一个整数。您可以比较同类型的唯一项目,所以要么比较字符串到字符串或整数到整数:

if (strcmp(argv[1], "3") == 0) { 
    // ... 
} 

if (atoi(argv[i]) == 3) { 
    // ... 
} 

第二种方式将土崩瓦解你的时候尝试比较为零(atoi返回零以指示错误)。