c - 尝试在 C 中执行简单的 do_operation 函数

标签 c operators operation

作为初学者,我尝试在 C 中尝试一个非常简单的操作函数有点疯狂,但似乎我尝试的一切都失败了,尽管它应该可以工作。

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

int     calcul(int nb1, int nb2, char *av)
{
        int nb = 0;
        if (av[2] == '*')
                nb = nb1 * nb2;
        if (av[2] == '%')
                nb = nb1 % nb2;
        if (av[2] == '/')
                nb = nb1 / nb2;
        if (av[2] == '+')
                nb = nb1 + nb2;
        if (av[2] == '-')
                nb = nb1 - nb2;
        return (nb);
}

int     atoi();

int     main(int ac, char **av)
{
        printf("%s", av[2]);
        if (ac == 4)
                printf("%d", calcul(atoi(av[1]), atoi(av[3]), av[2]));
        return (0);
}

似乎在第二个参数(即运算符)通过 calcul 函数时,它会将实际字符更改为它的 ASCII 值或其他值,因此无法正确检测到在这种情况下。

我试过很多方法并查找其他片段,但这正是他们正在做的以及它应该如何工作(即使我删除了 printf),所以我我做错了吗?

编辑 抱歉,我故意更改参数的数量以获得其他内容的段错误,这是我正在测试的“正确”函数,我遇到了问题。

此外,我使用此函数的方式是在 shell 中以这种格式运行一个简单的编译程序:

./a.out 2 * 3

已解决 正如@Mike 在进入计算函数时指出的那样,运算符 av[2] 现在被认为是第一个也是唯一的字符参数,因此要用 av[0] 标识.这有点令人困惑/棘手。

最佳答案

您的索引有误。假设您想要打印运算符字符以确保它正常工作,我稍微更改了代码。

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

int     calcul(int nb1, int nb2, char *av)
{
        int nb = 0;
        printf("%c\n", av[0]);
        if (av[0] == '*')
                nb = nb1 * nb2;
        if (av[0] == '%')
                nb = nb1 % nb2;
        if (av[0] == '/')
                nb = nb1 / nb2;
        if (av[0] == '+')
                nb = nb1 + nb2;
        if (av[0] == '-')
                nb = nb1 - nb2;
        return (nb);
}

int     main(int ac, char **av)
{
        printf("%s\n", av[2]);
        if (ac == 4)
                printf("%d\n", calcul(atoi(av[1]), atoi(av[3]), av[2]));
        return (0);
}

请注意,在您的 calcul 函数中,您正在调用 av[2],这是试图获取仅包含您的运算符字符(NULL)的字符串的第三个索引。

预计到达时间:

还有关于 * 运算符的注释。要使其正常工作,您需要使用转义字符 \ 调用它。

预计到达时间 2:

更改代码以匹配答案中的编辑,以便可以通过以下方式调用它:

./a 3 + 4
./a 3 '*' 9

关于c - 尝试在 C 中执行简单的 do_operation 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38961012/

相关文章:

c - 使用 make & C 计算多文件编译

python - 使用两个加法运算符将两个整数相加在 python 中有效吗?

c - C中不同结构体的指针数组

mysql - 在多个列中搜索多个值,仅显示与所有值匹配的记录 MySQL

rust - 核心中的运算符真的是循环定义的吗?

c# - 如何在 Deedle 框架中将值从 <string> 转换为 <double> 类型?

java - 对空结果集的非法操作

java - Swagger(-ui) 不显示操作

c - 如何根据传递给函数的字符返回字符数组?

c - 查询连接组件数量