Buongiorno a tutti,
sto implementando un codice in C++ in cui ad un certo punto utilizzo la funzione sprintf() e, per un motivo che mi è completamente oscuro, una variabile che non dovrebbe c'entrare nulla con la funzione cambia il suo valore iniziale in un numero enorme; con questo codice:
codice:
[...]
x[0]=xL; // prima casella del vettore x ha il valore xL
for(i=1;i<IMAX;i++)
{
x[i]=x[i-1]+dx;
}
if(x[IMAX-1]>xR) //se valore x[IMAX] supera il limite destro x[IMAX]=xR
{x[IMAX-1]=xR;}
hL=8.0;
hR=0.8;
uL=0.0;
uR=0.0;
pf1=fopen("dati_iniz_U.txt","w");
for(i=0;i<IMAX;i++) //inizializzo Q con le condizioni iniziali
{
if(x[i]<=0)
{
Q[i].h=hL;
Q[i].u=uL;
}
else
{
Q[i].h=hR;
Q[i].u=uR;
}
fprintf(pf1,"%d %f\n", i, Q[i].h);
}
fclose(pf1);
char nome[6];
for(j=0;j<=NMAX;j++)
{
if(j==0)
{printf("%f\n", Q[0].h);}
sprintf(nome,"[...]/dati_u%d.txt",j);
pf1=fopen(nome,"w"); //apro file in scrittura
if (pf1==NULL)
{
printf("ERRORE creazione file");
system("PAUSE"); return 1;
}
[...]
stampando a schermo la variabile Q[0].h ha valore 8.0 come è giusto che sia, se invece modifico il codice in questo modo,
codice:
for(j=0;j<=NMAX;j++)
{
sprintf(nome,"[...]/dati_u%d.txt",j);
if(j==0)
{printf("%f\n", Q[0].h);}
pf1=fopen(nome,"w"); //apro file in scrittura
mettendo
codice:
if(j==0)
{printf("%f\n", Q[0].h);}
dopo la sprintf
il valore della variabile stampato a schermo è un numero a 20 zeri...
non capisco il motivo di questa cosa...
vi sarei grato se mi seste una mano
grazie