Newsgroup: it.comp.lang.c
Titolo: problema stampa su file / a video

ciao  a tutti, ho un problema con la stampa su file.. spiego
brevemente il programma: ho creato delle strutture che si chiamano
box[num] , i cui elementi sono vettori colonna x[i] e y[i]. Tali
strutture possono differire per il numero di elementi in essa
contenuti, e vengono create secondo un certo criterio (se ne crea una
nuova ogni volta che, leggendo un file in input, il programma
riconosce due elementi consecutivi uguali).
Tramite la funzione stampa (int num) posso controllare quale struttura
stampare.
Fin qui tutto ok. Applicando poi la funzione spline (.....) su ogni
struttura creo un nuovo vettore colonna y2[i].
Il problema è il seguente: volendo stampare a video e su file i
vettori colonna x[i], y[i], y2[i] succede questo:
se dico, mediante il parametro k,  alla funzione stampa di stampare ad
es. la seconda struttura a video (e il relativo y2[i]), il programma
stampa la seconda struttura tante volte quante sono le strutture
totali create( e il relativo y2[i]); nello stesso caso la stampa su
file esegue quello che voglio, cioè stampa solo la seconda struttura
una volta sola (..).
Se invece dico alla funzione stampa di stampare tutte le strutture
create, col comando stampa(k),  il programma a video stampa l'output
corretto, mentre su file scrive solo l'ultima struttura creata.
E' un casino: non capisco proprio come mai vi sia
quest'ambiguità....dove sbaglio?
posto solo la parte relativa alla funzione int stampa(int num) che
viene chiamata nel programma.
int stampa(int num){
  int i;
  float x[npts];
  float y[npts];
  float y2[npts];
  FILE *fk;
  fk = fopen("derivazione.txt", "w");
  if(!fk){
    printf("errore in apertura file\n");
    exit(1) ;
  }
  fprintf(fk,"\n ");
  for(i=0;i<box[num].max_val;i++){
    x[i]=box[num].x[i][0];
    y[i]=box[num].x[i][1];
  }
  spline(x-1, y-1, i,INFIN,INFIN, y2-1);
  for(i=0;i<box[num].max_val;i++){
   fprintf(fk, "%e\t%e\t%.5e\n",x[i],y[i],y2[i]);
  }
   fclose(fk);
  return 0;
}

 riconosce due elementi consecutivi uguali).
io non ho capito com'e' fatta la box[]...
Ciao Jack


cerco di spiegarmi meglio:
letto un array di n colonne e m righe, il programma lo divide in
sottoarray se trova che l'elemento a_1,m= a_1,m+1 (2 elementi della
stessa colonna consecutivi uguali).
I sottoarray creati hanno come elementi 2 vettori colonna (gli altri
n-2 non mi interessano..) che chiamo x[i] e y[i].
A questo punto, tramite la funzione stampa, scelgo quale sottoarray
stampare...
e il resto è quello che ho detto nel post precedente.
spero di essere stato più chiaro.
grazie a tutti
f.

 }
secondo me e' la funzione spline che fa casino. Perche' gli passi i
come terzo parametro (che e' uguale a box[num].max_val)? Se voui
passargli box[num].max_val, passagli quello, non i.
Inoltre non ho capito cosa vuoi fare con gli altri parametri (non gli
INFIN): x-1,y-1 e y2-1 che  cosa sono? Cioe' x,y e y2 sono vettori,
sembra che stai giocando coi puntatori, ma x == x[0], x-1 == x[-1]
(che non da' probabilmente quello che vuoi).
Altra cosa: int stampa(int num); ritorna un int, e giustamente alla
fine hai un return 0. Ma perche' metti un exit(1) se il file non si
apre? Nel senso e' giusto, ma io farei un return 1, in modo che il
programma non si interrompa (getione delle eccezioni).
Poi non ho capito sta cosa di stampa(k) e stampa(int num) per stamapre
su file e/o su video...boh
Ciao Jack

 su file e/o su video...boh
nono, stampa(k) è la chiamata alla funzione stampa(int num) x fare
stampare tutte la struttura k creata, il comando è lo stesso
(ovviamente) sia per stampa a video che su file. IL problema è infatti
l'output: stampa(k) su video stampa tutte le strutture create, dalla 1
alla k, mentre su file stampa solo l'ultima struttura creata.
Perchè a video invece le stampa tutte? Dov'è l'errore nella logica di
stampa (int num) ?
ciao ciao  f.

 stampa (int num) ?
Il codice che hai postato non ha da nessuna parte roba che stampa a
video. Secondo te coma faccio a sapere se ci sono problemi se non vedo
il codice?
Prendi il codice di stampa() che hai postato, metti al posto del
fprintf() dei normali printf() e vedi cosa succede. Inoltre metti dei
printf() di debug, che visualizzano num, i, x[i], y[i], ecc.
Ciao Jack