Я немного схожу с ума, пытаясь использовать очень простую операционную функцию в C как новичок, но кажется, что все, что я пробовал, не удалось, хотя и должно работать.Пытаясь сделать простую функцию do_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
), так что я делаю неправильно?
EDIT Извините, я намеренно изменяю количество аргументов, чтобы получить segfault для чего-то еще, вот «правильная» функция, которую я тестирую, для которой у меня возникает проблема.
Кроме того, как я буду использовать эту функцию посредством выполнения простой скомпилированной проги под этим форматом в скорлупе:
./a.out 2 * 3
решаемых Как отметил @ Mike при входе в функции высчитывает, ава [2 ], который является оператором, теперь считался первым и единственным символьным аргументом, поэтому он должен был отождествляться с av [0]. Это немного запутанно/сложно.
Если вы используете оболочку, это может быть интерпретация вашего оператора как шаблона и замена вашего расширения, когда вы его получите в своей программе. – jxh
Как точно эта программа должна быть вызвана? – dbush
также появляется, что вы обращаетесь за пределы массива 'char ** av'. Если' ac == 4', то единственными действительными индексами для 'av' являются 0 до 3. – yano