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