如何从C中的命令行读取星号(*)作为参数

时间:2015-03-29 16:52:22

标签: c command-line

我编写了一个代码来执行简单的算术运算,从命令行获取输入。所以,如果我想进行乘法运算,我会键入" prog_name 2 * 3"在终端,应输出"产品:6"。

问题是,除了乘法之外,所有操作都有效。经过一些测试,我发现用于获取运算符的第三个参数(argc [2])实际上是存储程序名称。那我怎么能做这个呢?

这是代码:

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

void main(int argc, char *argv[])
{
    int a, b;
    if(argc != 4)
    {
        printf("Invalid arguments!");
        system("pause");
        exit(0);
    }
    a = atoi(argv[1]);
    b = atoi(argv[3]);
    switch(*argv[2])
    {
        case '+':
            printf("\n Sum : %d", a+b);
            break;
        case '-':
            printf("\n Difference : %d", a-b);
            break;
        case '*':
            printf("\n Product : %d", a*b);
            break;
        case '/':
            printf("\n Quotient : %d", a/b);
            break;
        case '%':
            printf("\n Remainder: %d", a%b);
            break;
        default:
            printf("\n Invalid operator!");
    }
}

3 个答案:

答案 0 :(得分:4)

这与C无关,但与你的shell有关。如果您希望能够将它们作为参数,则需要引用*(以及其他shell特殊字符)。否则shell将进行替换,特别是globbing。

所以你需要用以下方式调用你的程序:

./myprog 3 '*' 2

答案 1 :(得分:0)

实际上,操作系统是负责扩展通配符的操作系统,因此它是特定于操作系统的(C程序只接收操作系统解释的内容)。

也就是说,在大多数操作系统中,如果引用通配符,它​​将不会展开program_name 2 "*" 3。更好的是,将整个表达式作为单个参数(program_name "2 * 3"

传递

答案 2 :(得分:0)

您的问题不在您的代码中。它在OS / shell中。您看,命令行中的*扩展为目录内容,因此参数2 * 3扩展为2 dir1 dir2 file1, file2, etc...

我建议您使用类似“2 * 3”的内容作为参数,例如sscanf(argv[1], "%d%c%d", &a, &command, &b);