РЕДАКТИРОВАТЬ : Какира и CodeBuzz верны.Ваш segfault от StackShow
.Ошибка, которую я указал ниже, приведет к неправильной установке arg
, но это не приведет к вашей ошибке.
Ваш компилятор сообщает вам, в чем проблема.Ваш scanf
ожидает указатель на число с плавающей запятой, но вы даете указатель на двойное число.В Linux вы должны указать double to scanf как %lf
, но если вашему компилятору требуется %e
, попробуйте использовать его.
У вас также есть проблема, потому что вы вызываете shell
сзначение arg
не его адрес.Вы даете адрес arg
в scanf
, но все, что вы там делаете, - это помещаете значение в переменную, локальную для этой подпрограммы.Вы должны делать что-то более похожее на:
void shell(char *s1, double *arg)
{
scanf("%s %lf%*c", s1, arg);
}
main()
{
...
double arg;
shell(cmd, &arg);
}
Таким образом, scanf
заполняет arg
, который вы передаете, и вам не нужно также возвращать значение.Если вы хотите продолжить возвращать значение отдельно, не передавайте его, так как это только запутывает проблему.Например:
double shell(char *s1, double *arg)
{
double arg;
scanf("%s %lf%*c", s1, &arg);
return arg;
}
main()
{
...
double arg;
arg = shell(cmd);
}