在我的程序中,我輸入int
值到argv[1]
。我需要把if
聲明是這樣的:int和argv之間的比較
num = 3;
if (argv[1] == num)
{
[...]
}
我得到一個警告:comparison between pointer and integer [enabled by default]
如何比較這兩個值?
在我的程序中,我輸入int
值到argv[1]
。我需要把if
聲明是這樣的:int和argv之間的比較
num = 3;
if (argv[1] == num)
{
[...]
}
我得到一個警告:comparison between pointer and integer [enabled by default]
如何比較這兩個值?
您可能需要使用各種方法從argv [1]中讀取一個數字,然後與num進行比較。 (S * scanf函數)
一說是最具體的給你:http://pubs.opengroup.org/onlinepubs/7908799/xsh/strtol.html
或者打印張數轉換爲字符串,並做argv的一個STRCMP [1](S * printf的)
如何將「num」轉換爲字符串? – Lc0rE
'int argnum = strtol(argv [1],NULL,10); if(num == argnum){}' –
'char tmp [8];的sprintf(TMP, 「%d」,NUM);如果(strcmp(argv [1],tmp)== 0){}' –
的命令行參數字符串。您需要首先使用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 */
...
如何在這種情況下使用「strtod」函數?比你非常多 – Lc0rE
@ user1409641:'strtod'用於將字符串轉換爲浮點數。這是一個錯字。我修復了錯字。使用'strtol'或'strtoul'(後者用於'unsigned'整數)。爲您添加了一些代碼,以便開始使用。 – dirkgently
num = 3;
if (atoi(argv[1]) == num)
{
[...]
}
atoi有錯誤報告問題。堅持strtol。 –
記住argv
,它被傳遞到main
,是串的陣列。
您可以將字符串轉換爲具有atoi
或strtol
(後者是首選替代方法)等功能的整數。或者你將整數轉換爲一個字符串,並做一個strcmp
。
「strtod」和「strtol」之間的區別?非常感謝 – Lc0rE
@ user1409641'strtol'將一個字符串轉換爲一個整數('long')類型,而'strtod'轉換爲一個浮點('double')類型。 –
num
是一個整數,而argv[1]
是一個字符串,可能(或可能不)代表一個整數。您可以比較同類型的唯一項目,所以要麼比較字符串到字符串或整數到整數:
if (strcmp(argv[1], "3") == 0) {
// ...
}
或
if (atoi(argv[i]) == 3) {
// ...
}
第二種方式將土崩瓦解你的時候嘗試比較爲零(atoi
返回零以指示錯誤)。
你需要將字符串解析爲一個'int'。 – Mysticial
C中沒有矢量嗎?你的意思是數組嗎? – wildplasser