gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:34:50 25 4
gpt4 key购买 nike

作为初学者,我尝试在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com