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


Автор: Krav 29.3.2009, 17:20
возникла проблема при передаче массива в функцию
Код
void poter(float x[42],float y[42],float& a,float& b,int n1,int n2)
{
  int i;
  float xi,yi;
  xi=x[n2-n1+1];
  yi=y[n2-n1+1];
  a=xi/yi;
  b=yi/xi;
  return;
}

int main(int argc, char *argv[])
{
 float time[42],T1[42], T2[42], rubbish,r,t;
 int i;
std::ifstream in("file.txt");
i=1; 
do {
    in >> time[i] >> T1[i] >> T2[i] >> rubbish;
 i++;  
} while (in);
poter(T1,T2,r,t,5,5);
cout<<r<<" "<<t;
return 0;
}

когда просматриваю через watch значение переменных x и y, то они не выглядят как элементы массива, а отображаются как едичное значение:
x=00125948
y=001259F0

Автор: Dmi3ev 29.3.2009, 17:30
Цитата

void poter(float x[42],float y[42],float& a,float& b,int n1,int n2)

делай так
Код

void poter(float x[],float y[],float& a,float& b,int n1,int n2)

функция сама поймет какая длина у массива...
а проблему твою не понял...
че не работает-то?

Автор: Krav 29.3.2009, 17:36
Вот на скрине видны значения X и Y, то есть в функцию не передались значения массива.
http://ipicture.ru/

Автор: Dmi3ev 29.3.2009, 17:39
а в T1,T2 они есть? глянь...

Автор: Krav 29.3.2009, 17:48
нету

Автор: Dmi3ev 29.3.2009, 17:50
Цитата

нету 

следовательно, массив из файла не читается, а в функцию все передается отлично...

Добавлено @ 17:51
покажи файл на данный момент, что-то не то мутишь там...

у тебя должен быть файл типа
Код

1.1 1.2 1.3 1.4
1.5 1.6 1.7 1.8

Автор: Krav 29.3.2009, 18:08
всё, разобрался

ошибся при записи цикла

Автор: Dmi3ev 29.3.2009, 18:14
еще бросается в глаза что i у тебя от 1, а в С++ с 0 массиву нумеруют, те
у тебя 
1 2 3 4 ...
а надо 
0 1 2 3 4 5 ...

поработал с файлом, убери за собой
Код

in.close();



что-то вроде должно быть у тебя...
Код

    //...
        if (!in)
        {
                cout<<"ERROR"<<endl;
                system ("pause")
                return 0;
        }
        int i=0;
        while (!in.eof())
        {
                in>>time[i]>>T1[i]>>T2[i]>>rubbish;
                i++;
        }
    //...
        in.close();


+ еще с точки зрения здравого смысла:
зачем читать каждый раз rubbish, если все равно там будет последнее значение?

Автор: Rififi 29.3.2009, 19:56
Krav, 
когда просматриваю через watch значение переменных x и y, то они не выглядят как элементы массива, а отображаются как едичное значение:
так и должно быть.
при такой передаче теряется информация о типе, и имя массива представляется как указатель.
в watch есть специальные опции для просмотра, типа  x,10 - показать 10 элементов по адресу x

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