PDA

View Full Version : Aiuto ad un principiante!


ASA200
18-03-2003, 21:01
Salve a tutti! Intanto mi scuso per le violenze che ho fatto verso il povero c++ nel programma che segue, ma sono davvero alle prime armi ;) ! Il problema è che invece di restituire stringhe con il nome del file mi mette a video un singolo carattere strano per ogni nome di stella :muro: . cosa c'è che non va? Grazie!

#include <iostream.h>
#include <cmath>
int k=8;
class star
{ double mg;
double dist;
char str[8];
public:
star (char n[k], double m, double d );
double reall();
char getstra(){ return str[8];};

};

double star::reall()
{
return ((mg+5)-(5*log10(dist/3.26)));
}


star::star (char n[k] , double m, double d )
{
str[8]= n[k] ;
mg = m;
dist = d;
}

int main()
{
int i=0;
star cost[6]=
{
star ( "sirius" , -1.4 , 8.7),
star ( "Arturus" , -0.06 , 37),
star ( "Vega" , 0.04 ,27),
star ( "Capella" , 0.06 , 45),
star ( "Sun" , -27 , 0.000015749196),
star ( "Rigel" , -0.14 , 750),
};

for (i=0;i<6;i++)
{cout<<" Rmg "<<cost[i].getstra()<<" = "<<cost[i].reall();
}

return 0;
}

cionci
19-03-2003, 09:43
#include <iostream.h>
#include <cmath>
#include <stdlib.h>

#define k 8 //meglio usare un define per queste cose...in teoria come
//avevi fatto te non avrebbe nemmeno dovuto compilare

class star
{
double mg;
double dist;
char str[k];
public:
star (char n[k], double m, double d );
double reall();
char* getstra(){ return str;}; //il problema era anche qui ritornavi
//str[k] che era l'ottavo carattere della stringa

};

double star::reall()
{
return ((mg+5)-(5*log10(dist/3.26)));
}


star::star (char n[k] , double m, double d )
{
strcpy(str, n); //e qui assegnavi l'ottavo carattere all'ottavo carattere
mg = m;
dist = d;
}

int main()
{
int i=0;
star cost[6]=
{
star ( "sirius" , -1.4 , 8.7),
star ( "Arturus" , -0.06 , 37),
star ( "Vega" , 0.04 ,27),
star ( "Capella" , 0.06 , 45),
star ( "Sun" , -27 , 0.000015749196),
star ( "Rigel" , -0.14 , 750),
};

for (i=0;i<6;i++)
{
cout<<" Rmg "<<cost[i].getstra()<<" = "<<cost[i].reall() << endl;
}

system("PAUSE");
return 0;
}

ASA200
19-03-2003, 13:32
grazie mille!