2013-06-01 40 views
-1
int 
main(int argc, char *argv[]) { 
    int n; 
    if (2 <= *argv[1] && *argv[1] <= 20){ 
     n = *argv[1]; 

    return 0; 
} 

所以我試圖設置n = argv [1]的值。 輸入是"C: myprogram 4"所以輸出應該是4.但是當我打印n的值時,我得到了52.爲什麼這是?arg [v]輸入和輸出值

回答

3

'4'的ASCII碼不是4而是52。如果您想要實際的數字而不是字符串,請使用atoi(argv[1])將第一個參數轉換爲n整數。

+0

請注意,'的atoi() '根據定義在任何錯誤條件下產生未定義的行爲。對於允許處理錯誤的字符串到數字的轉換,可以使用'strtol()'(或'strtoul()')。) –

0

通知argv[i]類型:

main(int argc, char* argv[]) 
       ^
       | argv[i] is a string. 

如果*argv[i]您指數和訪問元素它基本上是一個字符不是int。這就是'4'被解釋爲52的原因,它是char '4'的ASCII值。

要處理和argv[i]值爲整數將其轉換爲int。更好地轉換爲使用int atoi (const char * str);

int n = atoi(argv[i]); 

注意:下面都是不同的:

4 is a int 
    '4' is a char 
    "4" is a string (\0 terminated) 

此外,其良好的檢查使用argc傳遞給主參數號 - 參數計數器。

if(argc < NoOfArgumentsNeeded) { 
    // print error and exit 
} 
0

當你通過命令行參數傳遞的東西,他們都默認字符流和被分配到**argv。當你獲取argv[i][j]時,你會得到一個字符。

如果你做argv[i]你會得到一個字符串,你的情況是"4"。所以,你所嘗試的是錯誤的。

有你有52原因是性格4的ASCII值是52 使用內置atoi(str)你可以轉換字符串,如"438"整數438 請參閱下面的代碼:

#include<stdio.h> 
int 
main(int argc, char *argv[]) { 
    int n=-1; //initialized to prevent garbage incase if case fails 
    if (2 <= atoi(argv[1]) && atoi(argv[1]) <= 20){ 
     n = atoi(argv[1]); 
    } 
    printf("%d",n); 
    return 0; 
}