Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 17 su 17
  1. #11
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    Ciao

    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);
    }
    Ultima modifica di torn24; 11-07-2014 a 15:27
    Tecnologia

  2. #12
    Utente di HTML.it L'avatar di fedrock
    Registrato dal
    Jun 2009
    residenza
    Milan
    Messaggi
    342
    Quote Originariamente inviata da torn24 Visualizza il messaggio
    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

    I SHOULD TELL YOU SOMETHING NEW:
    don't want you here.


  3. #13
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551
    Ciao la funzione è void , per passare il puntatore "array" , o restituisci un puntatore "accesso * carica_dati()" , o passi il puntatore come parametro ad un altra funzione. Se sei completamente a digiuno sui puntatori , non so se ti conviene usarli anche se sarebbero la soluzioni migliore , dovresti pensare "secondo me " di dichiarare il tuo array di struct nel main e passarlo alle varie funzioni .
    Ti consiglio di iniziare dal main , di dichiarare le tue variabili , di pensare a che funzioni aggiuntive ti servono "prototipi", e solo alla fine pensare di implementarle
    Ora un thread parla di un problema specifico , e non di un intero programma , quindi per ogni problema apri un thread diverso .

    una domanda , " mancano 5 giorni all'esame" , scusa di che esame si tratta , se non sono indiscreto ? non dovresti conoscere già i puntatori ?
    Tecnologia

  4. #14
    Utente di HTML.it L'avatar di fedrock
    Registrato dal
    Jun 2009
    residenza
    Milan
    Messaggi
    342
    Quote Originariamente inviata da torn24 Visualizza il messaggio
    Ciao la funzione è void , per passare il puntatore "array" , o restituisci un puntatore "accesso * carica_dati()" , o passi il puntatore come parametro ad un altra funzione. Se sei completamente a digiuno sui puntatori , non so se ti conviene usarli anche se sarebbero la soluzioni migliore , dovresti pensare "secondo me " di dichiarare il tuo array di struct nel main e passarlo alle varie funzioni .
    Ti consiglio di iniziare dal main , di dichiarare le tue variabili , di pensare a che funzioni aggiuntive ti servono "prototipi", e solo alla fine pensare di implementarle
    Ora un thread parla di un problema specifico , e non di un intero programma , quindi per ogni problema apri un thread diverso .

    una domanda , " mancano 5 giorni all'esame" , scusa di che esame si tratta , se non sono indiscreto ? non dovresti conoscere già i puntatori ?
    Esatto, dovrei ma non li conosco o meglio so la storiella degli indirizzi etc etc ma concettualmente non riesco ad utilizzarli... si tratta di un esame di 6 crediti "programmazione" (seconda parte di informatica) grazie di tutto

    I SHOULD TELL YOU SOMETHING NEW:
    don't want you here.


  5. #15
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non ho capito se è una materia "accessoria" (che non vedrai mai più ... ) o è alla base della tua laurea ... nel qual caso ti consiglierei di darla solo quando i puntatori li hai capito bene ....
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #16
    Utente di HTML.it L'avatar di fedrock
    Registrato dal
    Jun 2009
    residenza
    Milan
    Messaggi
    342
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Non ho capito se è una materia "accessoria" (che non vedrai mai più ... ) o è alla base della tua laurea ... nel qual caso ti consiglierei di darla solo quando i puntatori li hai capito bene ....
    Hai assolutamente ragione ma volevo prendere la borsa di studio e quinid mi servivano crediti, mannaggia al tempo che ho sprecato per esami stupidi...

    I SHOULD TELL YOU SOMETHING NEW:
    don't want you here.


  7. #17
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Beh, decidi come meglio per te ma ricorda comunque per la programmazione C comprendere l'uso dei puntatori è indispensabile.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.