2015-09-25 91 views
2

我會直接點。這是我的代碼,我想從命令行參數中讀取'*'字符,但它不能正常工作。我希望你能解釋我做錯了什麼。如何在命令行中讀取* C

#include <stdio.h> 
#include <stdlib.h> 

int sum(int, int); 
int rest(int, int); 
int division(int, int); 
int mult(int, int); 
int module(int, int); 

int main(int argc, char **argv){ 

    char operator; 
    int number1; 
    int number2; 
    int result; 

    if(argc != 4){ 
     printf("Wrong parameter quantity (%d of 3 needed)\n", argc-1); 
     return -1; 
    } 

    number1 = atoi(argv[1]); 
    operator = *argv[2]; 
    number2 = atoi(argv[3]); 

    switch(operator){ 
     case '+': 
       result = sum(number1, number2); 
       printf("%d %c %d = %d\n", number1, operator, number2, result); 
       break; 
     case '-': 
       result = rest(number1, number2); 
       printf("%d %c %d = %d\n", number1, operator, number2, result); 
       break; 
     case '/': 
       result = division(number1, number2); 
       printf("%d %c %d = %d\n", number1, operator, number2, result); 
       break; 
     case '*': 
       result = mult(number1, number2); 
       printf("%d %c %d = %d\n", number1, operator, number2, result); 
       break; 
     case '%': 
       result = module(number1, number2); 
       printf("%d %c %d = %d\n", number1, operator, number2, result); 
       break; 
     default: 
       printf("Error. Wrong operator inserted (%d, %c)\n", operator, operator); 
       return -2; 
    } 

    return 0; 
} 

int sum(number1, number2){ 
    return number1 + number2; 
} 

int rest(number1, number2){ 
    return number1 - number2; 
} 

int division(number1, number2){ 
    return number1/number2; 
} 

int mult(number1, number2){ 
    return number1 * number2; 
} 

int module(number1, number2){ 
    return number1 % number2; 
} 

我知道我的錯誤是連接這條線operator = *argv[2];但我不知道什麼時候「*」字符是通過命令行參數傳遞會發生什麼。對於所有其他符號(+, - ,/,%),一切正常。我在Ubuntu中編寫了這個代碼,並使用gcc在命令行中進行編譯。

+0

我用42,這是*的ASCII代碼,但它沒也不行。感謝您的快速回復。 –

+1

您的終端可能會替換劇目中所有文件的「*」。當我把'./your_program 5 \ * 7' – Missu

+0

這個鏈接發生了什麼[鏈接](https://www.dropbox.com/s/k8amswx0v1entsn/Screenshot%20from%202015-09- 25%2008%3A30%3A58.png?dl = 0) –

回答

5

該問題不在您的程序中。這就是你如何稱呼它。

UNIX/Linux shell自動將命令行上的*擴展爲當前目錄中的所有文件。爲了防止這種情況,你需要引用它。

所以不是這樣

./prog 3 * 4 

這樣做:

./prod 3 "*" 4 

或者這樣:

./prod 3 \* 4 
+0

聖潔.....它工作。非常感謝您的回答,我的腦袋即將爆炸 –