
Originariamente inviata da
torn24
Ciao ,se ti può essere utile ? capire bene i puntatori forse è complesso , ma usare un array dinamico nella pratica è abbastanza semplice .
http://www.cplusplus.com/reference/cstdlib/realloc/
codice:
accesso *db=NULL; //puntatore che non punta a nessuna locazione di memoria
int z=0;
while((fgets(buffer,sizeof(buffer), f))!=NULL)
{
z++;
db=(accesso *)realloc(db,sizeof(accesso)*z);
/*se db è NULL , realloc si comporta come malloc ,
successivamente rialloca memoria aumentandola di sizeof(accesso) ,
db si usa come un normale array db[0]
*/
sscanf(buffer,"%d:%d:%d %s %d",&db[z-1].hh,&db[z-1].mm,&db[z-1].ss, &db[z-1].C,&db[z-1].user);
}
Ciao grazie per l'aiuto, seguendo il tuo consiglio ho riscritto da capo il programma:
codice:
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int hh, mm, ss;
char C;
int user;
}accesso;
void carica_dati(char filename[])
{
FILE *f;
f = fopen(filename, "r");
if(f==NULL)
{ perror("File input error");
fclose(f);
exit(1); }
accesso *db = NULL;
char buffer[50];
int z = 0;
/*FILE *new;
new = fopen("newfile.txt", "w+"); */
while((fgets(buffer, sizeof(buffer), f))!=NULL)
{
z++;
db=(accesso *)realloc(db, sizeof(accesso)*z);
sscanf(buffer,"%d:%d:%d %s %d", &db[z-1].hh, &db[z-1].mm, &db[z-1].ss, &db[z-1].C, &db[z-1].user);
/*fprintf(new, "[%d]%d:%d:%d %c %d\n", z, db[z-1].hh, db[z-1].mm, db[z-1].ss, db[z-1].C, db[z-1].user);*/
}
int i, g;
accesso dbIU[sizeof(db)/2];
for(i=0; i<(z/2); i++)
{
for(g=0; g<z; g++)
{
if(db[i].user==db[g].user)
{
if(db[i].C=='U')
{
}
int permanenza(accesso dati)
{
int hI, mI, sI, hU, mU, sU;
hI = dati.hhI;
mI = dati.mmI;
sI = dati.ssI;
hU = dati.hhU;
mU = dati.mmU;
sU = dati.ssU;
int h, m, s;
h = hU-hI;
m = mU-mI;
s = sU-sI;
int stot;
stot = (h*3600) + (m*60) + s;
return stot;
}
int main(int argc, char *argv[])
{
carica_dati(argv[1]);
return 0;
}
Ora stavo provando a creare una struttura di tipo accesso che sia ordinata nel contenere sia l'ingresso che l'uscita in modo da passarla all'altra funzione "permanenza" (si può fare in quel modo oppure la struttura dentro "carica_dati" non è visibile fuori?) ma non riesco a trovare l'argoritmo giusto... stavo pensanto di fare prima una sort del file rispetto all'user in modo da trovarmi l'user in due righe "adiacenti" (azzo lo spiego
) cosi da semplificare la ricerca la ricerca dell'argoritmo ma non so se sia il massimo come idea...
Ammetto di non aver capito a cosa diavolo serve l'allocazione dinamica nonostante il link e altre robe che ho cercato, sono così limitato, ho come un blocco che mi impedisce di capire la malloc e i puntatori
e mancano 5 giorni all'esame 



