2015-09-25 107 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

圣洁.....它工作。非常感谢您的回答,我的脑袋即将爆炸 –