Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [C] funzione che legge da file e crea struttura

    Ciao ragazzi volevo proporvi il seguente esercizio:
    Scrivere una funzione in linguaggio C che legga da un file di testo dati relativi ad un gruppo di oggetti. Il file di testo conterrà nella prima riga il numero totale di oggetti mentre nelle righe successive saranno presenti tre campi: il volume, il peso e il colore (espresso in RGB come array di 3 indici). La funzione dovrà allocare e restituire un vettore di strutture “oggetto” contenenti i dati letti dal file.

    io l'ho fatto così:

    typedef struct oggetto {
    double volume,peso;
    unsigned char colore[3];
    } OGGETTO;

    OGGETTO *elenco(char *fname, int*dim) {
    FILE *fp;
    OGGETTO *vect;
    int i;
    if ((fp = fopen(“fname”, “r”)) != NULL ) {
    fscanf (fp, “%d\n”, dim);
    vect = (OGGETTO*)calloc ((*dim)*sizeof(OGGETTO));
    for (i=o; i<*dim; i++) {
    vect[i].colore = (char*)calloc ((*dim)*sizeof(char));
    }
    for (i=0; i<*dim; i++) {
    fscanf (fp, %d %lf %lf, vect[i].colore, &vect[i].volume, &vect[i].peso);
    }
    }
    else {
    perror (fname);
    return NULL;
    }
    fclose (fp)
    }
    return vect;
    }

    potreste dirmi se è giusto o meno o dove ho sbagliato?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: [C] funzione che legge da file e crea struttura

    Originariamente inviato da pablito92

    potreste dirmi se è giusto o meno o dove ho sbagliato?
    Ma non sai neanche se è giusto o sbagliato?

    Lo hai compilato? Lo hai eseguito?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3

    Re: Re: [C] funzione che legge da file e crea struttura

    Originariamente inviato da oregon
    Ma non sai neanche se è giusto o sbagliato?

    Lo hai compilato? Lo hai eseguito?
    al momento non ho il materiale dove compilarlo.volevo sapere se potete dirmi se è giusto o meno così arrivata a casa lo compilo subito. potreste darmi una mano?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Anche negli altri thread che hai aperto non hai mai compilato. Non è possibile scrivere esercizi senza compilarli e provarli.

    Quello che vedo, a prima vista, ad esempio, è

    for(i=o

    in cui confondi la lettera o con il numero 0 e poi l'allocazione di memoria senza puntatore ... ecc ...

    Ma sono tutte cose che vedi e correggi compilando.

    Sul perché tu non voglia/possa compilare, non è comprensibile ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    codice:
    typedef struct oggetto {
    double volume,peso;
    unsigned char colore[3];
    } OGGETTO;
    
    OGGETTO *elenco(char *fname, int*dim) {
    FILE *fp;
    OGGETTO *vect;
    int i;
    if ((fp = fopen(“fname”, “r”)) != NULL ) {
    fscanf (fp, “%d\n”, dim);
    vect = (OGGETTO*)calloc ((*dim)*sizeof(OGGETTO));
    for (i=o; i<*dim; i++) {
    vect[i].colore = (char*)calloc ((*dim)*sizeof(char));
    }
    for (i=0; i<*dim; i++) {
    fscanf (fp, %d %lf %lf, vect[i].colore, &vect[i].volume, &vect[i].peso);
    }
    }
    else {
    perror (fname);
    return NULL;
    }
    fclose (fp)
    }
    return vect;
    }
    Ciao , intanto userei la funzione malloc() , e comunque la calloc() non si usa in quel modo

    calloc(numero_elementi , dimensione_byte) .

    unsigned char colore[3]; è un array di tre elementi , non un puntatore , quindi non
    devi allocare memoria !

    colore è un array di char nella fscanf() non userai %d ma %s


    questa parte

    for (i=o; i<*dim; i++) {
    vect[i].colore = (char*)calloc ((*dim)*sizeof(char));
    }

    La puoi eliminare .
    Tecnologia

  6. #6
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Mi è venuto in mente , che un colore RGB
    è qualcosa del genere

    112 219 147


    quindi nella fscanf()
    potresti fare una cosa di questo tipo


    fscanf (fp, "%d%d%d%lf%lf", &vect[i].colore[0],&vect[i].colore[1],&vect[i].colore[2], &vect[i].volume, &vect[i].peso);
    Tecnologia

  7. #7

    Re: ciao

    Originariamente inviato da torn24
    Mi è venuto in mente , che un colore RGB
    è qualcosa del genere

    112 219 147


    quindi nella fscanf()
    potresti fare una cosa di questo tipo


    fscanf (fp, "%d%d%d%lf%lf", &vect[i].colore[0],&vect[i].colore[1],&vect[i].colore[2], &vect[i].volume, &vect[i].peso);
    torn un ultima cosa. nell'edercizio mi viene chiesto anche come mai nella riga:

    OGGETTO *elenco(char *fname, int*dim) {

    viene passato come argomento int *dim e non invece int dim.
    sapresti dirmi perchè?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Si passa così (per puntatore) per permettere la modifica del valore all'interno della funzione.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Originariamente inviato da oregon
    Si passa così (per puntatore) per permettere la modifica del valore all'interno della funzione.
    grazie mille ragazzi

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.