Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [C] Duplicare struct

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    17

    [C] Duplicare struct

    È da un po' che sto sbattendo la testa su questo esercizio ma non riesco proprio a venirne a capo:
    -creare una funzione di nome duplicaStruct che dato in ingresso una struct INFO ne restituisca il suo duplicato allocato in maniera dinamica.
    Ho cercato su google e non sono riuscito a trovare una soluzione, ho provato con memcpy e funziona, ma ovviamente non è quello che mi chiede la traccia

    funzione duplicaStruct:
    codice:
    struct INFO *duplicaStruct(struct INFO *s, int i){
        struct INFO *s2 = (struct INFO *)malloc(sizeof(struct INFO));
        s2[i].codice = s[i].codice;
        strcpy(s2[i].nome, s[i].nome);
        s2[i].npezzi = s[i].npezzi;
        s2[i].prezzo = s[i].prezzo;
        return s2;
    }
    utilizzo nel main:
    codice:
    int main(){
        struct INFO *s[MAXLEN];
        struct INFO *s2[MAXLEN];
        ...
        for(i=0;i<n;i++){ //n è il numero di strutture create per s
            s2[i]=duplicaStruct(*s, i);
        }
        
        printf("-----STRUCT 1-----\n");
        stampaStruct(s, n);
        printf("-----STRUCT 2-----\n");
        stampaStruct(s2, n);
    }
    Output:
    codice:
    // Inserisco i valori per la struct 1
    Codice: 1
    Nome: Prodotto1
    Prezzo: 5
    Numero pezzi: 30
    
    Codice: 2
    Nome: Prodotto2
    Prezzo: 2
    Numero pezzi: 30
    
    -----STRUCT 1-----
    Codice: 1
    Nome: Prodotto1
    Prezzo: 5.00
    Numero pezzi: 30
    
    Codice: 2
    Nome: Prodotto2
    Prezzo: 2.00
    Numero pezzi: 30
    
    -----STRUCT 2-----
    Codice: 1
    Nome: Prodotto1
    Prezzo: 5.00
    Numero pezzi: 30
    
    Codice: 0
    Nome:
    Prezzo: 0.00
    Numero pezzi: 0

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Manca parte del main per capire meglio e la funzione di stampa ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    17
    Avevo messo solo quella parte perché visto che per l'altra funziona bene pensavo il problema fosse lì.
    Ecco tutto il programma:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAXLEN 50
    
    struct INFO{
        int codice;
        char nome[50];
        float prezzo;
        int npezzi;
    };
    
    struct INFO *duplicaStruct(struct INFO *s, int i){
        struct INFO *s2 = (struct INFO *)malloc(sizeof(struct INFO));
        s2[i].codice = s[i].codice;
        strcpy(s2[i].nome, s[i].nome);
        s2[i].npezzi = s[i].npezzi;
        s2[i].prezzo = s[i].prezzo;
        return s2;
    }
    struct INFO *riempiStruct(){
        struct INFO *s=(struct INFO *)malloc(sizeof(struct INFO));
        printf("Codice: ");
        scanf("%d", &(s->codice));
        printf("Nome: ");
        scanf("%s", s->nome);
        printf("Prezzo: ");
        scanf("%f", &(s->prezzo));
        printf("Numero pezzi: ");
        scanf("%d", &(s->npezzi));
        return s;
    }
    int aggiungiStruct(struct INFO **s){
        int n=0,i;
        for (i=0;i<MAXLEN;++i) s[i]=NULL;
        do {
            printf("Quante schede vuoi inserire?");
            scanf("%d",&n);
        } while (n>MAXLEN);
        for (i=0;i<n;++i) {
            s[i]=riempiStruct();
        }
        return n;
    }
    void stampaStruct(struct INFO **s, int n){
        int i;
        for(i=0;i<n;i++){
            printf("Codice: %d\n", s[i]->codice);
            printf("Nome: %s\n", s[i]->nome);
            printf("Prezzo: %.2f\n", s[i]->prezzo);
            printf("Numero pezzi: %d\n\n", s[i]->npezzi);
        }
    }
    int main(){
        struct INFO *s[MAXLEN];
        struct INFO *s2[MAXLEN];
        int n=0, i;
        n=aggiungiStruct(s);
        
        for(i=0;i<n;i++){
            s2[i]=duplicaStruct(*s, i);
        }
        
        printf("-----STRUCT 1-----\n");
        stampaStruct(s, n);
        printf("-----STRUCT 2-----\n");
        stampaStruct(s2, n);
    }

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Quote Originariamente inviata da Gigius Visualizza il messaggio
    Avevo messo solo quella
    Sì, ma era per controllare anche le altre parti ed evitare incomprensioni.

    La funzione deve essere

    codice:
    struct INFO *duplicaStruct(struct INFO **s, int i){
        struct INFO *s2 = (struct INFO *)malloc(sizeof(struct INFO));
        s2->codice = s[i]->codice;
        strcpy(s2->nome, s[i]->nome);
        s2->npezzi = s[i]->npezzi;
        s2->prezzo = s[i]->prezzo;
        return s2;
    }
    e la chiamata

    codice:
    s2[i]=duplicaStruct(s, i);
    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 © 2024 vBulletin Solutions, Inc. All rights reserved.