Esercizio gestione dischi in c

di il
7 risposte

Esercizio gestione dischi in c

Ho scritto questo codice, per permettermi di gestire un archivio di dischim ma alla line 171 mi dà l'errore "warning: assignment makes integer from pointer without a cast" e non ho idea di come risolvere. Grazie mille a chi mi aiuterà o meno.
//L'algoritmo richiede la gestione di un archivio di dischi e opportune operazioni di inserimento, cancellazione e restituzione di prezzo minore
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void inseriredisco();
void tuttidischi();
void eliminadisco();
void prezzominore();
int ric_bin_ricTF(int minn,int minorii[],int numdiscc,int primoo,int ultimoo);

enum Categorie
{
  ROCK,
  JAZZ,
  POP,
  EDM,
  HOUSE,
  SIZECAT
};

typedef struct Disco{//struct del disco
    char titolo[30];
    char autore[30];
    int prezzo;
}disco;

typedef struct categoriamusicale{//struct della categoria musicale
char codnum[30];
char generemus[30];
int numdischi;
disco discoo[30];
}Categoria;
Categoria categoriamusicalee[SIZECAT];

disco discoo[30];

int i,st;
int numdisc=0;

int main()
{
    //tramite lo strcpy vado ad inserire tutti i generi all'interno della struct categoriamusicale
  strcpy(categoriamusicalee[ROCK].codnum,"rockmusic");
  strcpy(categoriamusicalee[ROCK].generemus, "ROCK");

  strcpy(categoriamusicalee[JAZZ].codnum,"jazzmusic");
  strcpy(categoriamusicalee[JAZZ].generemus, "JAZZ");

  strcpy(categoriamusicalee[POP].codnum,"popmusic");
  strcpy(categoriamusicalee[POP].generemus, "POP");

  strcpy(categoriamusicalee[EDM].codnum,"edmmusic");
  strcpy(categoriamusicalee[EDM].generemus, "EDM");

  strcpy(categoriamusicalee[HOUSE].codnum,"housemusic");
  strcpy(categoriamusicalee[HOUSE].generemus, "HOUSE");

    int flag=0;

        printf("------BENVENUTO------\n");
    while(flag!=5)
    {
        printf("\n 1 - Inserire nuovo disco");
        printf("\n 2 -Disco con prezzo minore");
        printf("\n 3 - Visualizzare tutti dischi");
        printf("\n 4 - Eliminare un disco");
        printf("\n 5 - Uscita\n");

    printf("\nDigita il numero corrispondente l'operazione da eseguire -> ");
    scanf("%d",&flag);

    switch (flag)
      {
        case 1: inseriredisco(); break;
        case 2: prezzominore(); break;
        case 3: tuttidischi(); break;
        case 4: eliminadisco(); break;
        case 5: printf("\n -------------------------------------------------------------------------- \n Il programma della gestione dischi vi augura un buon proseguo di giornata! \n --------------------------------------------------------------------------");
                EXIT_SUCCESS; break;

      }
    }
}

void tuttidischi() //visualizzazione di tutti i dischi presenti all'interno dell'archivio
{int p;
printf(" \n-----------------------------------------------------------------------");
printf(" \n                        |  BACHECA DISCHI  | \n ");
printf("\n|TITOLO| |AUTORE| |PREZZO|\n");
for (p=0; p<numdisc; p++)
       {
            if (strcmp(" ",categoriamusicalee[p].discoo[p].titolo)==0)
            {
            printf("\n%s ",categoriamusicalee[p+1].discoo[p+1].titolo);
            printf("%s ",categoriamusicalee[p+1].discoo[p+1].autore);
            printf("%d\n",categoriamusicalee[p+1].discoo[p+1].prezzo);
            p++;
            }
            else
            {
            printf("\n%s ",categoriamusicalee[p].discoo[p].titolo);
            printf("%s ",categoriamusicalee[p].discoo[p].autore);
            printf("%d\n",categoriamusicalee[p].discoo[p].prezzo);
            }
       }

}
void inseriredisco(){//inserimento del disco
                int fi;
                printf(" \n | Scegli il genere/categoria musicale digitando il numero corrispondente. | \n");
                printf("\n    | 1: ROCK | - | 2: JAZZ | - | 3: POP | - | 4: EDM | - | 5: HOUSE | \n");
                printf("\n Ora digita qui il numero (1-5) -> ");
                scanf("%d",&fi);
                switch(fi)
                {case 1:
                    printf("TITOLO: ");
                    scanf("%s",&categoriamusicalee[numdisc].discoo[numdisc].titolo);
                    printf("AUTORE: ");
                    scanf("%s",&categoriamusicalee[numdisc].discoo[numdisc].autore);
//IMPORTANTE: dato che per la restituzione del prezzo minore è stato richiesto un algoritmo ricorsivo di divide-et-impera
//inserire il prezzo in ordine crescente.
                    printf("PREZZO: ");
                    scanf("%d",&categoriamusicalee[numdisc].discoo[numdisc].prezzo);
                    numdisc++; break;
                case 2:
                    printf("TITOLO: ");
                    scanf("%s",&categoriamusicalee[numdisc].discoo[numdisc].titolo);
                    printf("AUTORE: ");
                    scanf("%s",&categoriamusicalee[numdisc].discoo[numdisc].autore);
                    printf("PREZZO: ");
                    scanf("%d",&categoriamusicalee[numdisc].discoo[numdisc].prezzo);
                    numdisc++; break;
                case 3:
                    printf("TITOLO: ");
                    scanf("%s",&categoriamusicalee[numdisc].discoo[numdisc].titolo);
                    printf("AUTORE: ");
                    scanf("%s",&categoriamusicalee[numdisc].discoo[numdisc].autore);
                    printf("PREZZO: ");
                    scanf("%d",&categoriamusicalee[numdisc].discoo[numdisc].prezzo);
                    numdisc++; break;
                case 4:
                    printf("TITOLO: ");
                    scanf("%s",&categoriamusicalee[numdisc].discoo[numdisc].titolo);
                    printf("AUTORE: ");
                    scanf("%s",&categoriamusicalee[numdisc].discoo[numdisc].autore);
                    printf("PREZZO: ");
                    scanf("%d",&categoriamusicalee[numdisc].discoo[numdisc].prezzo);
                    numdisc++; break;
                case 5:
                    printf("TITOLO: ");
                    scanf("%s",&categoriamusicalee[numdisc].discoo[numdisc].titolo);
                    printf("AUTORE: ");
                    scanf("%s",&categoriamusicalee[numdisc].discoo[numdisc].autore);
                    printf("PREZZO: ");
                    scanf("%d",&categoriamusicalee[numdisc].discoo[numdisc].prezzo);
                    numdisc++; break;
                }
            }

void eliminadisco()//eliminazione di un disco
{char tit[30]; int v;
puts("Inserisci il titolo del disco da eliminare: ");
scanf("%s", &tit);
for (v=0; v<=numdisc; v++)
    {
    if (strcmp(tit,categoriamusicalee[v].discoo[v].titolo)==0)
        {
        strcpy(categoriamusicalee[v].discoo[v].titolo," ");
        strcpy(categoriamusicalee[v].discoo[v].autore," ");
        categoriamusicalee[v].discoo[v].prezzo=" ";
        }
    }
}

void prezzominore()//restituzione del disco con prezzo minore tramite algoritmo divide-et-impera ricorsivo.
{int min=categoriamusicalee[0].discoo[0].prezzo; int l; int minori[30]; int res, indice=0;
int primo=0;
    int ultimo=numdisc-1;
    for(i=0;i<numdisc;i++)
{
    minori[i]=categoriamusicalee[i].discoo[i].prezzo;

}
for (l=1; l<numdisc; l++)
{
    if (min>categoriamusicalee[l].discoo[l].prezzo)
    {
        min=categoriamusicalee[l].discoo[l].prezzo;
        indice=l;
    }
}
res=ric_bin_ricTF(min,minori,numdisc,primo,ultimo);
    printf(" \n                        |  DISCO PREZZO MINORE  | \n ");
    printf("\n|TITOLO|");
    printf("\n%s\n",categoriamusicalee[res].discoo[res].titolo);
}
int ric_bin_ricTF(int minn,int minorii[],int numdiscc,int primoo,int ultimoo)
{   int mediano;
  if (primoo>ultimoo)
        return 1;

  {
    mediano=(primoo+ultimoo)/2;
    if(minn==minorii[mediano])
    {   return mediano; }
    else
    {
        if (minn<minorii[mediano])
        { return ric_bin_ricTF(minn,minorii,numdiscc,primoo,mediano-1); }
    else
        { return ric_bin_ricTF(minn,minorii,numdiscc,mediano+1,ultimoo); }
    }
  }
}

7 Risposte

  • Re: Esercizio gestione dischi in c

    "prezzo" è definito come int, quindi l'assegnazione
    categoriamusicalee[v].discoo[v].prezzo=" ";
    va cambiata in
    categoriamusicalee[v].discoo[v].prezzo= 0;
    Allo stesso modo, alle righe tipo la 118
    scanf("%s",&categoriamusicalee[numdisc].discoo[numdisc].titolo);
    "titolo" è già "char *" (è un array di char).
    Quindi devi o togliere "&" o mettere
    scanf("%s",&categoriamusicalee[numdisc].discoo[numdisc].titolo[0]);
  • Re: Esercizio gestione dischi in c

    Allora la prima modifica l'ho fatta
    categoriamusicalee[v].discoo[v].prezzo= 0;
    Solo che, nella function "Inseriredisco" ho messo titolo[0] e autore[0], ma nel momento in cui vado ad eliminare un disco, capita che nella stampa mi stampi "0", e se vado ad inserire altri dischi, quel "0" non scompare, ma occupa uno spazio, facendo inserire il nuovo disco alla seconda posizione, spero mi sia fatto capire
  • Re: Esercizio gestione dischi in c

    Questo è il codice modificato
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    void inseriredisco();
    
    void prezzominore();
    
    int ric_bin_ricTF(int minn,int minorii[],int numdiscc,int primoo,int ultimoo);
    
    void tuttidischi();
    
    void eliminadisco();
    
    enum Categorie
    {
      ROCK,
      JAZZ,
      POP,
      EDM,
      HOUSE,
      SIZECAT
    };
    
    typedef struct Disco{//struct del disco
        char titolo[30];
        char autore[30];
        int prezzo;
    }disco;
    
    typedef struct categoriamusicale{//struct della categoria musicale
    char codnum[30];
    char generemus[30];
    int numdischi;
    disco discoo[30];
    }Categoria;
    
    Categoria categoriamusicalee[SIZECAT];
    
    disco discoo[30];
    
    int i;
    int st;
    int numdisc=0;
    
    int main()
    {
        strcpy(categoriamusicalee[ROCK].codnum,"rockmusic");
        strcpy(categoriamusicalee[ROCK].generemus, "ROCK");
    
        strcpy(categoriamusicalee[JAZZ].codnum,"jazzmusic");
        strcpy(categoriamusicalee[JAZZ].generemus, "JAZZ");
    
        strcpy(categoriamusicalee[POP].codnum,"popmusic");
        strcpy(categoriamusicalee[POP].generemus, "POP");
    
        strcpy(categoriamusicalee[EDM].codnum,"edmmusic");
        strcpy(categoriamusicalee[EDM].generemus, "EDM");
    
        strcpy(categoriamusicalee[HOUSE].codnum,"housemusic");
        strcpy(categoriamusicalee[HOUSE].generemus, "HOUSE");
    
        int flag=0;
    
        printf("------BENVENUTO------\n");
    
        while(flag!=5)
        {
            printf("\n 1 - Inserire nuovo disco");
            printf("\n 2 - Disco con prezzo minore");
            printf("\n 3 - Visualizzare tutti dischi");
            printf("\n 4 - Eliminare un disco");
            printf("\n 5 - Uscita\n");
            printf("\nDigita il numero corrispondente l'operazione da eseguire -> ");
            scanf("%d",&flag);
            switch (flag)
                {
                    case 1: inseriredisco(); break;
                    case 2: prezzominore(); break;
                    case 3: tuttidischi(); break;
                    case 4: eliminadisco(); break;
                    case 5: printf("\n -------------------------------------------------------------------------- \n Il programma della gestione dischi vi augura un buon proseguo di giornata! \n --------------------------------------------------------------------------");
                    EXIT_SUCCESS; break;
                }
        }
    }
    
    void inseriredisco()
    {
                    int fi;
                    printf(" \n | Scegli il genere/categoria musicale digitando il numero corrispondente. | \n");
                    printf("\n    | 1: ROCK | - | 2: JAZZ | - | 3: POP | - | 4: EDM | - | 5: HOUSE | \n");
                    printf("\n Ora digita qui il numero (1-5) -> ");
                    scanf("%d",&fi);
                    switch(fi)
                    {case 1:
                        printf("TITOLO: ");
                        scanf("%s",categoriamusicalee[numdisc].discoo[numdisc].titolo);
                        printf("AUTORE: ");
                        scanf("%s",categoriamusicalee[numdisc].discoo[numdisc].autore);
                        printf("PREZZO: ");
                        scanf("%d",&categoriamusicalee[numdisc].discoo[numdisc].prezzo);
                        numdisc++; break;
                    case 2:
                        printf("TITOLO: ");
                        scanf("%s",categoriamusicalee[numdisc].discoo[numdisc].titolo);
                        printf("AUTORE: ");
                        scanf("%s",categoriamusicalee[numdisc].discoo[numdisc].autore);
                        printf("PREZZO: ");
                        scanf("%d",&categoriamusicalee[numdisc].discoo[numdisc].prezzo);
                        numdisc++; break;
                    case 3:
                        printf("TITOLO: ");
                        scanf("%s",categoriamusicalee[numdisc].discoo[numdisc].titolo);
                        printf("AUTORE: ");
                        scanf("%s",categoriamusicalee[numdisc].discoo[numdisc].autore);
                        printf("PREZZO: ");
                        scanf("%d",&categoriamusicalee[numdisc].discoo[numdisc].prezzo);
                        numdisc++; break;
                    case 4:
                        printf("TITOLO: ");
                        scanf("%s",categoriamusicalee[numdisc].discoo[numdisc].titolo);
                        printf("AUTORE: ");
                        scanf("%s",categoriamusicalee[numdisc].discoo[numdisc].autore);
                        printf("PREZZO: ");
                        scanf("%d",&categoriamusicalee[numdisc].discoo[numdisc].prezzo);
                        numdisc++; break;
                    case 5:
                        printf("TITOLO: ");
                        scanf("%s",categoriamusicalee[numdisc].discoo[numdisc].titolo);
                        printf("AUTORE: ");
                        scanf("%s",categoriamusicalee[numdisc].discoo[numdisc].autore);
                        printf("PREZZO: ");
                        scanf("%d",&categoriamusicalee[numdisc].discoo[numdisc].prezzo);
                        numdisc++; break;}
    }
    
    void prezzominore()//restituzione del disco con prezzo minore tramite algoritmo divide-et-impera ricorsivo.
    {
    int min=categoriamusicalee[0].discoo[0].prezzo;
    int l;
    int minori[30];
    int res, indice=0;
    int primo=0;
    int ultimo=numdisc-1;
    for(i=0;i<numdisc;i++)
            {
                minori[i]=categoriamusicalee[i].discoo[i].prezzo;
            }
    for (l=1; l<numdisc; l++)
            {
                if (min>categoriamusicalee[l].discoo[l].prezzo)
                        {
                            min=categoriamusicalee[l].discoo[l].prezzo;
                            indice=l;
                        }
    }
    res=ric_bin_ricTF(min,minori,numdisc,primo,ultimo);
                printf(" \n                        |  DISCO PREZZO MINORE  | \n ");
                printf("\n|TITOLO|");
                printf("\n%s\n",categoriamusicalee[res].discoo[res].titolo);
    }
    
    int ric_bin_ricTF(int minn,int minorii[],int numdiscc,int primoo,int ultimoo)
    {
            int mediano;
            if (primoo>ultimoo)
            return 1;
                {
                    mediano=(primoo+ultimoo)/2;
                    if(minn==minorii[mediano])
                            {
                                return mediano;
                            }
                            else
                            {
                                if (minn<minorii[mediano])
                                        {
                                            return ric_bin_ricTF(minn,minorii,numdiscc,primoo,mediano-1);
                                        }
                                        else
                                        {
                                            return ric_bin_ricTF(minn,minorii,numdiscc,mediano+1,ultimoo);
                                        }
                            }
                }
    }
    
    void tuttidischi() //visualizzazione di tutti i dischi presenti all'interno dell'archivio
    {
        int p;
        printf(" \n-----------------------------------------------------------------------");
        printf(" \n                        |  BACHECA DISCHI  | \n ");
        printf("\n|TITOLO| |AUTORE| |PREZZO|\n");
        for (p=0; p<numdisc; p++)
                {
                        if (strcmp(" ",categoriamusicalee[p].discoo[p].titolo)==0)
                        {
                            printf("\n%s ",categoriamusicalee[p+1].discoo[p+1].titolo);
                            printf("%s ",categoriamusicalee[p+1].discoo[p+1].autore);
                            printf("%d\n",categoriamusicalee[p+1].discoo[p+1].prezzo);
                            p++;
                        }
                        else
                        {
                            printf("\n%s ",categoriamusicalee[p].discoo[p].titolo);
                            printf("%s ",categoriamusicalee[p].discoo[p].autore);
                            printf("%d\n",categoriamusicalee[p].discoo[p].prezzo);
                        }
                }
    }
    
    void eliminadisco()//eliminazione di un disco
    {
        char tit[30]; int v;
        puts("Inserisci il titolo del disco da eliminare: ");
        scanf("%s", tit);
            for (v=0; v<=numdisc; v++)
                {
                    if (strcmp(tit,categoriamusicalee[v].discoo[v].titolo)==0)
                        {
                            strcpy(categoriamusicalee[v].discoo[v].titolo," ");
                            strcpy(categoriamusicalee[v].discoo[v].autore," ");
                            categoriamusicalee[v].discoo[v].prezzo=0;
                        }
                }
    }
    purtroppo, come gia ho detto prima (puoi anche provarlo) per un pò mi elimina e sostituisce il disco, ma andando avanti mi sostituisce il disco eliminato con "0", e quando inserisco un nuovo disco non si toglie lo "0", ma il nuovo disco viene messo sotto. Scusa ancora il disturbo, ma è per l'esame di Prog 1 e non riesco proprio a capire come risolvere.
  • Re: Esercizio gestione dischi in c

    Secondo me c'è un errore nella funzione "inseriredisco" (ed anche altrove). Le righe dovrebbero essere ad esempio:
    scanf("%s",categoriamusicalee[ROCK].discoo[numdisc].titolo);
    altrimenti non distingui i generi, ed inoltre arrivato a numdisc==SIZECAT+1 il programma dovrebbe crashare, perché hai definito
    Categoria categoriamusicalee[SIZECAT];
    Personalmente non avrei adottato quella struttura, avrei usato una cosa del tipo
    typedef struct Disco{
        char titolo[MAXSTR];
        char autore[MAXSTR];
        float prezzo;
        enum Categorie genere;	// 
        .... altri campi ....
    }disco;
    disco Dischi[MAXDISCHI];
    Per quanto riguarda il tuo problema, devi usare un debugger e vedere dove ti genera le anomalie: secondo me prima devi correggere tutti i punti dove hai messo cose tipo
    categoriamusicalee[v].discoo[v].titolo
    perché i due indici indicano cose diverse e non possono essere definiti da una sola variabile.
  • Re: Esercizio gestione dischi in c

    Grazie mille per il tuo aiuto, purtroppo quest'anno tra covid, corsi e tutto, ho perso parecchie lezioni e mi ritrovo ora a studiare e a programmare prima dell'esame, ho deciso di rifare il progetto perché da come vedo ha molti problemi e di cui, purtroppo, molti non ho idea di come risolverli, grazie comunque moltissimo per il tuo aiuto, sperando di capire come farlo bene e sperando che vada bene (non considerando che dovrei consegnare anche un progetto dove viene effettuato il "gioco del 15" e non so nemmeno da dove partire). E nulla, grazie
  • Re: Esercizio gestione dischi in c

    Ho cambiato completamente modo, che ne dici?
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAXSTR 20
    
    typedef struct
    {
        char genere[MAXSTR];
        char titolo[MAXSTR];
        char autore[MAXSTR];
        int prezzo;
    }disco;
    
    disco Disco[9];
    
    void inseriscidisco();
    
    void tuttidischi();
    
    void eliminadisco();
    
    int pop=0;
    int rap=3;
    int jazz=6;
    
    int main()
    {
        int a=0;
        printf("-----BENVENUTO-----");
        while(a<4)
        {
        printf("\nLe operazioni possibili sono le seguenti:\n");
        printf("0 - Inserire un disco (MAX 3)\n");
        printf("1 - Stampare tutti i dischi presenti;\n");
        printf("2 - Eliminare un disco;\n");
        printf("3 - Visualizzare il disco con il prezzo minore;\n");
        printf("\nInserisci l'operazione che si vuole effettuare: ");
        scanf("%d", &a);
        switch(a)
            {
                case 0: inseriscidisco(); break;
                case 1: tuttidischi(); break;
                case 2: eliminadisco(); break;
            }
        }
    }
    
    void inseriscidisco()
    {
        char gen[MAXSTR];
        printf("\nLe categorie sono: POP - RAP - JAZZ\n");
        printf("\nInserisci la categoria nella quale si va ad inserire (in minuscolo): ");
        scanf("%s", gen);
        if(strcmp(gen,"pop")==0)
        {
            printf("\nTITOLO: ");
            scanf("%s", Disco[pop].titolo);
            printf("\nAUTORE: ");
            scanf("%s", Disco[pop].autore);
            printf("\nPREZZO: ");
            scanf("%d", &Disco[pop].prezzo);
            pop++;
        }
        else if(strcmp(gen,"rap")==0)
        {
            printf("\nTITOLO: ");
            scanf("%s", Disco[rap].titolo);
            printf("\nAUTORE: ");
            scanf("%s", Disco[rap].autore);
            printf("\nPREZZO: ");
            scanf("%d", &Disco[rap].prezzo);
            rap++;
        }
        else if(strcmp(gen,"jazz")==0)
        {
            printf("\nTITOLO: ");
            scanf("%s", Disco[jazz].titolo);
            printf("\nAUTORE: ");
            scanf("%s", Disco[jazz].autore);
            printf("\nPREZZO: ");
            scanf("%d", &Disco[jazz].prezzo);
            jazz++;
        }
        else
        {
            printf("\nNon esiste questa categoria.\n");
        }
    }
    
    void tuttidischi()
    {
        int i,j,k;
        for(i=0;i<3;i++)
        {
            printf("\n|Categoria POP|\n");
            printf("\n-----------\n");
            printf("TITOLO: %s\n", Disco[i].titolo);
            printf("AUTORE: %s\n", Disco[i].autore);
            printf("PREZZO: %d\n", Disco[i].prezzo);
            printf("-----------\n");
        }
        for(j=3;j<6;j++)
        {
            printf("\n|Categoria RAP|\n");
            printf("\n-----------\n");
            printf("TITOLO: %s\n", Disco[j].titolo);
            printf("AUTORE: %s\n", Disco[j].autore);
            printf("PREZZO: %d\n", Disco[j].prezzo);
            printf("-----------\n");
        }
        for(k=6;k<9;k++)
        {
            printf("\n|Categoria JAZZ|\n");
            printf("\n-----------\n");
            printf("TITOLO: %s\n", Disco[k].titolo);
            printf("AUTORE: %s\n", Disco[k].autore);
            printf("PREZZO: %d\n", Disco[k].prezzo);
            printf("-----------\n");
        }
    }
    
    void eliminadisco()
    {
        int i;
        char titolodaeliminare[MAXSTR];
        printf("Inserisci il titolo del disco che vuoi eliminare: ");
        scanf("%s", titolodaeliminare);
        for(i=0;i<9;i++)
        {
            if(strcmp(Disco[i].titolo,titolodaeliminare)==0)
            {
                strcpy(Disco[i].titolo,"");
                strcpy(Disco[i].autore,"");
                Disco[i].prezzo=0;
                printf("\n--DISCO ELIMINATO--");
            }
        }
    }
    non ho eseguito l'elimina disco perché volevo sapere se secondo te così andasse meglio (e anche perché non saprei come fare ora l'elimina disco).
  • Re: Esercizio gestione dischi in c

    Il programma è concettualmente sbagliato: hai creato un vettore di 9 strutture di tipo "disco", poi hai usato un indice prestabilito per accedere ai generi musicali e questo è sbagliato. Non perché non funziona, ma perché non è funzionale. Ti do' una traccia, vedi di svilupparla:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    
    #define MAXSTR 20
    #define MAXDISCHI 100
    #define false 0
    #define true 1
    
    enum Generi {
        POP,
        JAZZ,
        ROCK,
        CLASSICA,
        ALTRO
        };
    
    typedef struct
    {
        char titolo[MAXSTR];
        char autore[MAXSTR];
        enum Generi genere;
        float prezzo;
        int cancellato;
    }disco;
    
    disco Disco[MAXDISCHI];
    ....
    
    Questo è un array di MAXDISCHI di qualunque genere (anche tutti del medesimo). Per inserire un nuovo disco, vai al primo elemento libero dell'array (quindi ti serve un metodo per capire qual è il primo elemento libero), e riempi i campi.
    Per cancellarlo, quando sei sull'elemento desiderato metti il campo "cancellato" a 1 (true) e se lo desideri puoi anche cancellare fisicamente gli altri campi, ma non è indispensabile.
Devi accedere o registrarti per scrivere nel forum
7 risposte