麻烦从家庭作业计算器程序的命令行读取*字符

时间:2016-04-30 06:51:51

标签: c

我有一个在C中创建计算器程序的任务,该程序总共需要4个命令行参数,解析整数和算术运算符,执行操作并以1 + 1 = 2的形式打印解决方案。我的程序按预期工作,除了*用于乘法。我知道*是bash中的一个特殊字符,当我使用\来逃避它时,我的程序正常工作。例如:$ lab3 1 \* 3返回3.但是,要求用户转义星号不符合我的作业要求。有没有办法将*解析为char变量?

我的整个计划:

#include <stdio.h>

int main(int argc, char **argv)
{
    int     n1, n2;
    char    operand[1];
    char    garbage[100];

    if(argc != 4) {
        printf("invalid input!");
        return 0;
    }
    else if(sscanf(argv[1], "%d %s", &n1, garbage) != 1) {
        printf("%s is not a number\n", argv[1]);
        return 0;
    }
    else if(sscanf(argv[3], "%d %s", &n2, garbage) != 1) {
        printf("%s is not a number\n", argv[3]);
        return 0;
    }
    else if(sscanf(argv[2], "%c %s",  operand, garbage) != 1) {
        printf("%s is not a valid argument\n", argv[2]);
    }
    else
    {
        if(*operand == '+') {
            printf("%d + %d = %d\n", n1, n2, n1 + n2);
        }
        else if(*operand == '-') {
            printf("%d - %d = %d\n", n1, n2, n1 - n2);
        }
        else if(*operand == '*') {
            printf("%d * %d = %d\n", n1, n2, n1 * n2);
        }
        else if(*operand == '/') {
            printf("%d / %d = %d\n", n1, n2, n1 / n2);
        }

    }
}

1 个答案:

答案 0 :(得分:1)

我认为将*作为'*'(简单引号)传递就可以了,因为bash不会扩展简单的引用字符串。

如果不允许这样做,您可以查看有关如何禁用bash扩展的帖子:Stop shell wildcard character expansion?

此外,由于在实际调用程序之前进行扩展,因此无法在程序内部完成此操作。

此致