c - 从家庭作业计算器程序的命令行读取 * 字符时遇到问题

标签 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);
        }

    }
}

最佳答案

我认为将 * 传递为 '*'(单引号)可以解决问题,因为 bash 不会扩展简单的引号字符串。

如果这也不允许,你可以看看这篇关于如何禁用 bash 扩展的帖子:Stop shell wildcard character expansion?

此外,这无法在您的程序内部完成,因为扩展发生在您的程序实际被调用之前。

问候

关于c - 从家庭作业计算器程序的命令行读取 * 字符时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36951781/

相关文章:

c - openmp中的不平衡嵌套for循环

c - 使用 C 参数运行 shell 脚本的安全方法,工作示例

c# - 如何将用 c/c++ 编写的 exe 引用到 c# 项目?

c - gdb bt 只给出??,我该如何调试?

c - 当函数只有中间部分不同时,避免重复代码

c - 设置为 0.1 的 float 将 false 与 0.1 进行比较

C 中的 main() 之前不能声明 void 函数

c - 为什么 GCC 可以消除 C11 atomic_load 中的内存屏障?

c - 如何在 C 中连接两个 char *?

c++ - 哪个子树在 Avl 树删除中具有更高的优先级