2012-01-27 59 views
-1

我想將argv[]的幾個字符傳遞給一個函數,然後返回一個值。
例如:如何將幾個字符的argv []傳遞給C中的函數?

int main(int argc, char *argv[]) { 
    int n1, value; 
    for (i = 1; i <= n1; i++) { 
     value = Convert(argv[]); 
     printf("%d\n", value); 
    } 
} 

float Convert(*argv[]) { 
    int value; 

    switch(*argv[]){ 
     case 'ABC': value = 1; break; 
     case 'DEF': value = 2; break; 
     case 'GHI': value = 3; break; 
     default: value = 0; break; 
    } 
    return value; 
} 

我知道有語法錯誤,但我不知道如何解決這些問題。

希望你明白我的意思,對不起我的英文不好。

+6

你應該抓一本C書。並閱讀它。兩次。 – 2012-01-27 13:53:23

+1

並重新閱讀您之前提出的問題的答案,即使語法正確,「switch」也沒有機會做您想做的事情。爲什麼要返回一個'浮動'? – Mat 2012-01-27 13:54:56

+2

我覺得Luchian是對的。有*很多*這是錯誤的代碼。我認爲閱讀一本好書是從你所處的位置到你能夠用C編寫簡單程序的最有效方式。 – NPE 2012-01-27 13:54:57

回答

0

有幾種錯誤,請參見對原始代碼中的註釋:

int main(int argc, char *argv[]){ 
    int n1, value; 
    for (i = 1; i <= n1; i++) { 
     // you cannot pass it like that, if you want to pass the whole argv, it should be 
     // value = Convert(argv); 
     // If you want to pass one argument at a time it should be 
     // value = Convert(argv[i]); 
     value = Convert(argv[]); 
     printf("%d\n", value); 
    } 
} 

//If you want to pass one argument each time, the declaration should be 
// int Convert(char * argv) 
// Also note that you expect an int in return, not a float 
float Convert(*argv[]){ 
    int value; 

// you cannot switch on strings, only on integer types, so you need to perform if/else checks: 
/* 
if (strcmp(argv, "ABC") == 0) { 
    value = 1; 
} 
else if (strcmp(argv, "DEF") == 0) { 
    value = 2; 
} 
else if (strcmp(argv, "GHI") == 0) { 
    value = 3; 
} 
else { 
    value = 0; 
} 

*/ 
    switch(*argv[]){ 
    case 'ABC': value = 1;break; 
    case 'DEF': value = 2;break; 
    case 'GHI': value = 3;break; 
    default: value = 0;break; 
    } 
    return value; 
} 
0

argv是指向指針數組以字符(char **char *[])的陣列。您需要刪除它以獲取至少一個指向字符數組(C字符串)的指針,char *

char *param = argv[1]; 

如果您想用C字符串操作函數輕鬆地使用它,可以通過複製字符串來分割字符串。

char *first_three = strndup(argv[1], 3); 

字符串文字括用雙引號:

"ABC" // not 'ABC' 

字符串比較需要的C字符串,他們是不是在C原語:

if (!strcmp("ABC", first_three)) return 1; 

這是一個相當詳盡的列表你的計劃中有嚴重的錯誤,並且應該讓你開始走上恢復之路。

相關問題