sto iniziando a capirci qualcosa. Ho trovato molto complicato un pò di cose, io le chiedo se a qualcuno va di rispondere…

1)i puntatori, non ne capisco il senso. sono delle entità che invece di memorizzare un dato memorizzano l’indirizzo di un altra variabile? La cosa utile qual’è?
2)con questa libreria (libreria giusto?) posso fare molte operazioni sui file in I/O. Siccome a me in particolare per ora serve sapere prendere dei dati da un file e salvarli in un array, mi sto concentrando sulle funzioni:
scanf
printf
fopen
Ho visto molti esempi su vari libri che utilizzano maggiormente le funzioni fgets e fputs per prendere/inviare i dati tipo qui http://www.cplusplus.com/reference/clibrary/cstdio/FILE.html , vediamo se inizio a capire qualcosa di codice :
[code]
#include <stdio.h>
int main()
{
FILE * pFile;
char buffer [100];
pFile = fopen (“myfile.txt” , “r”);
if (pFile == NULL) perror (“Error opening file”);
else
{
while ( ! feof (pFile) )
{
fgets (buffer , 100 , pFile);
fputs (buffer , stdout);
}
fclose (pFile);
}
return 0;
}[/code]
FILE è il tipo di indicatore che devo usare per questa libreria, e cosi crea un puntatore su pFile.
Dopo crea un array buffer di tipo char con 100 posizioni. L’azione seguente legge (perche c’è la r) il file “myfile.txt”, poi mette una condizione di if else in caso il file fosse vuoto ed infine con fgets prende il file buffer e ci mette il contenuto di pFile.
Con fputs invece legge ciò che c’è in buffer e lo scrive in stdout (che deve essere di tipo FILE), e poi chiude pFile.
Giusto?
- Qui posto il pezzo di codice che sto cercando di capire :
float a,b;
FILE *fp1;
fp1 = fopen("c:\seat.txt","r");
int i;
for(i=0;i<MAX_INT;i++){
fscanf(fp1,"%f %f \n",&a, &b);
tempo[i]=a;
accz[i]=b;
com_accz[i].re=b;
com_accz[i].im=0.000000000000;
printf("%f %f \n",tempo[i], com_accz[i]);
}
Anche qui apre un file .txt come prima, ma poi con fscanf legge fp1 e lo immagazzina in a e b, sotto il tipo float (la %f).
Invece con printf stampa i valori float di tempo[i] e com_accz[i], ed essendo un ciclo ed essendoci \n verranno due colonne di dati giusto?
Premetto che non ho il file seat.txt ma lo avevo visto ed era anch’esso un due colonne di numeri reali (con decimali…quindi float è giusto).
Questa è una mia aggiunta fatta ora per vedere se ho capito delle funzioni:
float a,b;
FILE *fp1;
FILE *uscita; // ho messo un altro puntatore di tipo FILE per il file di output
uscita = fopen("c:\uscita.txt","w");
fp1 = fopen("c:\seat.txt","r");
int i;
for(i=0;i<MAX_INT;i++){
fscanf(fp1,"%f %f \n",&a, &b);
tempo[i]=a;
accz[i]=b;
com_accz[i].re=b;
com_accz[i].im=0.000000000000;
printf("%f %f \n",tempo[i], com_accz[i]);
fprintf (uscita, "Valori di a e b |n", a, b); // trascurando il significato dell'operazione di estrarre a e b
}
Praticamente mi si crea un file uscita.txt con all’interni due colonne di valori a e b giusto?