Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > функция не возвращает результат


Автор: Larrikin 17.2.2008, 01:30
обыскался опечаток - вроде нету и негде... но вместо ответа получаю ноль стабильно...

кусок ncalcd.c:
Код

// debug
            fprintf(stdout, "we got from calc: %f\n", calc(valueX, neuro[n].act, valueY) );


полный calc.c:
Код

#include <common.h>

double calc(double arg1, char act, double arg2)
{
    double result;

    result = arg1 + arg2;

    switch (act)
    {
        case '+':
            result = arg1 + arg2;
            break;
        case '-':
            result = arg1 - arg2;
            break;
        case '*':
            result = arg1 * arg2;
            break;
        case '/':
            if (arg2 == 0){
                result = arg1 / (arg2 + 0.000001);
            } else result = arg1 / arg2;
            break;
        default:
            puterror("Error: unknown action");
            break;
    }
// debug
            fprintf(stdout, "calc: %f %c %f = %f\n", arg1, act, arg2, result);

    return result;
}



результат работы:

calc: -45.000000 + -17.000000 = -62.000000
we got from calc: 0.000000

Автор: bilbobagginz 17.2.2008, 05:25
1. возможно у вас есть другая ф-я calc()
2. возможно вы не компилируете новый корретный файл, а пользуетесь старым объектом

сотрите все объекты и соберите программу с нуля


Автор: Larrikin 17.2.2008, 05:39
> grep calc *.c *.h
calc.c:double calc(double arg1, char act, double arg2)
calc.c:                 fprintf(stdout, "calc: %f %c %f = %f\n", arg1, act, arg2, result);
ncalcd.c:                       fprintf(stdout, "we got from calc: %f\n", calc(valueX, neuro[n].act, valueY) );
ncalcd.c:                       neuro[n].value = calc(valueX, neuro[n].act, valueY) ;
ncalcd.c:                               "We got from MySQL and calc: %i value of %i '%c' value of %i = %f\n",


собираю скриптом

> cat compile.sh
#!/bin/sh
gcc -o ncalcd `ls *.c` -I `pwd` -I /usr/local/include/ -I /usr/local/include/mysql -L /usr/local/lib/mysql -l mysqlclient
>

Автор: Mayk 17.2.2008, 05:49
3) возможно ф-ция calc не объявлена  в ncalcd.c и потому компилятор думает что она возвращает int.
Цитата

08:47:dvl:~/src$ cat a.c
#include <stdio.h>
#include <time.h>

int main( int argc, char** argv )
{
        printf("%f",x());
}

08:47:dvl:~/src$ cat b.c
double x()
{
    return -62.0;
}
08:48:dvl:~/src$ gcc -c {a.c,b.c}
08:48:dvl:~/src$ ./aa
0.0000000


Добавлено через 7 минут и 22 секунды
Цитата(Larrikin @  17.2.2008,  09:39 Найти цитируемый пост)
> grep calc *.c *.h
calc.c:double calc(double arg1, char act, double arg2)
calc.c:                 fprintf(stdout, "calc: %f %c %f = %f\n", arg1, act, arg2, result);
ncalcd.c:                       fprintf(stdout, "we got from calc: %f\n", calc(valueX, neuro[n].act, valueY) );
ncalcd.c:                       neuro[n].value = calc(valueX, neuro[n].act, valueY) ;
ncalcd.c:                               "We got from MySQL and calc: %i value of %i '%c' value of %i = %f\n",

Точно не объявлена. Засунь её прототип куда-нить чтоб ncald.c смог найти.

Автор: Larrikin 17.2.2008, 06:03
действительно нужно было руками прототип объявлять...
спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)