Aiuto programma esercitazione strutture e funzioni

di il
59 risposte

59 Risposte - Pagina 2

  • Re: Aiuto programma esercitazione strutture e funzioni

    Sinceramente non ho guardato il codice, ma ho dato un occhio alle strutture che usi.
    typedef struct {
    char ISBN[DIM];
    char Titolo[DIM];
    char Lista_Autori[DIM];
    } libro;
    Tu definisci una struttura 'autori': perché utilizzare un array di char per la lista di autori, quando puoi usare un array di tali strutture? Esattamente come fai con i clienti.
    typedef struct {
        cliente clienti[LUNG_MAX_ARCHIVIO];
    } archivio_clienti;
    Che senso ha creare qui una struttura? Ti basta dichiarare un array di tipo "cliente" e chiamarlo "archivio_clienti".

  • Re: Aiuto programma esercitazione strutture e funzioni

    In che senso ?
    non ho capito.
  • Re: Aiuto programma esercitazione strutture e funzioni

    tuixte ha scritto:


    Sinceramente non ho guardato il codice, ma ho dato un occhio alle strutture che usi.
    typedef struct {
    char ISBN[DIM];
    char Titolo[DIM];
    char Lista_Autori[DIM];
    } libro;
    Tu definisci una struttura 'autori': perché utilizzare un array di char per la lista di autori, quando puoi usare un array di tali strutture? Esattamente come fai con i clienti.
    typedef struct {
        cliente clienti[LUNG_MAX_ARCHIVIO];
    } archivio_clienti;
    Che senso ha creare qui una struttura? Ti basta dichiarare un array di tipo "cliente" e chiamarlo "archivio_clienti".

    Ho risolto. Va bene ora ?
    
    typedef struct {
    char nome[LUNG_NOME];
    char cognome[LUNG_COGNOME];
    char nazionalita[DIM];
    } autore;
    
    typedef struct {
     char ISBN[DIM];
     char titolo[DIM];
     autore lista_autori;
    } libro;
    
    typedef struct {
        char nome[LUNG_NOME];
        char cognome[LUNG_COGNOME];
        int codice_cliente[ID];
        libro lista_libri;
    } cliente;
    
    typedef struct {
        cliente clienti[LUNG_MAX_ARCHIVIO];
    } archivio_clienti;
    
  • Re: Aiuto programma esercitazione strutture e funzioni

    Ciao,
    lista_autori e lista_libri devono essere degli array (o proprio delle liste, se le avete fatte). Altrimenti, così come hai scritto, possono memorizzare solo un autore e un libro.
  • Re: Aiuto programma esercitazione strutture e funzioni

    minomic ha scritto:


    Ciao,
    lista_autori e lista_libri devono essere degli array (o proprio delle liste, se le avete fatte). Altrimenti, così come hai scritto, possono memorizzare solo un autore e un libro.
    le liste noi non le abbiamo proprio fatte.
    cosa sarebbe, in cosa consiste ? abbiamo operato sempre in questo modo

    tutte le strutture che ho fatto sono queste.
    
    typedef struct {
    char nome[LUNG_NOME];
    char cognome[LUNG_COGNOME];
    char nazionalita[DIM];
    } autore;
    
    typedef struct {
     char ISBN[DIM];
     char titolo[DIM];
     autore lista_autori;
    } libro;
    
    typedef struct {
        char nome[LUNG_NOME];
        char cognome[LUNG_COGNOME];
        int codice_cliente[ID];
        libro lista_libri;
    } cliente;
    
  • Re: Aiuto programma esercitazione strutture e funzioni

    Ok, ma nessuno ti vieta di scrivere
    autore lista_autori[10];
  • Re: Aiuto programma esercitazione strutture e funzioni

    minomic ha scritto:


    Ok, ma nessuno ti vieta di scrivere
    autore lista_autori[10];
    perfetto, allora scrivo così
  • Re: Aiuto programma esercitazione strutture e funzioni

    Rivedi anche la quantità di dati ... il codice ISBN non può essere di 500 caratteri !
  • Re: Aiuto programma esercitazione strutture e funzioni

    oregon ha scritto:


    Rivedi anche la quantità di dati ... il codice ISBN non può essere di 500 caratteri !
    Giusto: sono solo 13. Link.
  • Re: Aiuto programma esercitazione strutture e funzioni

    Sto avendo un sacco di problemi con i puntatori...prima il programma compilava, ora non riesce a compilare. Non capisco perchè
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define ID 50
    #define DIM 500
    #define LUNG_NOME 20
    #define LUNG_COGNOME 30
    #define LUNG_MAX_ARCHIVIO 300
    
    
    typedef struct {
    char nome[LUNG_NOME];
    char cognome[LUNG_COGNOME];
    char nazionalita[DIM];
    } autore;
    
    typedef struct {
     char ISBN[13];
     char titolo[DIM];
     autore lista_autori;
    } libro;
    
    typedef struct {
        char nome[LUNG_NOME];
        char cognome[LUNG_COGNOME];
        int codice_cliente[ID];
        libro lista_libri[10];
    } cliente;
    
    typedef struct {
        cliente clienti[LUNG_MAX_ARCHIVIO];
    } archivio_clienti;
    
    int compila_cliente(cliente *_cliente);
    int inserisci_cliente(cliente _nuovo_cliente, archivio_clienti *_arc_clienti);
    int check_cliente(char _codice_cliente[], archivio_clienti _arc_clienti);
    int compila_libri(cliente *nuovo_libro);
    int inserisci_tesseramento(cliente _nuovo_tesseramento, archivio_clienti *_arc_clienti);
    int mostra_tesseramento_cliente(char _codice_cliente[], archivio_clienti _arc_clienti);
    int mostra_clienti(archivio_clienti arc_clienti);
    
    /*
     * 
     */
    
    int main(int argc, char** argv) {
        int scelta;
        int i;
        archivio_clienti arc_CLIENTI;
        cliente nuovo_cliente;
        libro inserisci_libro;
        libro nuovo_libro;
        archivio_clienti arc_libri;
        
                   
        do {
            system("clear");
            printf("****BIBLIOTECA****\n\n");
            printf("1. Inserisci nuovo libro\n");
            printf("2. Tessera cliente\n");
            printf("3. Prestito di un libro\n");
            printf("4. Visualizza prestiti di un cliente\n");
            printf("5. Visualizza libri\n");
            printf("0. Esci\n\n");
            
            printf("\tScelta: ");
            scanf("%d", &scelta);
            
            switch (scelta) {
                case 1:
                 system("clear");
                 printf("ISBN: ");
                    scanf("%s", &nuovo_cliente.codice_cliente);
                    if (check_cliente(nuovo_cliente.codice_cliente, arc_CLIENTI) == 1) {
                        compila_cliente(&nuovo_cliente);
                        if (inserisci_cliente(nuovo_cliente, &arc_CLIENTI) == 1)
                            printf("Errore: archivio pieno!\n");
                    } else
                        printf("Cliente gia' presente\n");
                   
                    getchar();
                    getchar();
                    break;
       
                    switch (scelta) {
    
                            case 1:
                                system("clear");
                                compila_cliente(&nuovo_cliente);
                                strcpy(nuovo_cliente.codice_cliente, inserisci_libro.ISBN);
                                inserisci_cliente(nuovo_cliente, &arc_CLIENTI);
                                compila_libri(&nuovo_libro);
                                if (inserisci_libro(nuovo_cliente, &arc_libri) == 1)
                                    printf("Errore: archivio pieno!\n");
                                
                                getchar();
                                getchar();
                                
                                break;
    
                            default:
                                printf("Scegli un'opzione valida\n");
                               
                        }
                 
                    break;
                    
            case 0:
                printf("Arrivederci, alla prossima ;)\n");
                break;
                
                default:
                   printf("Carattere errato: Inserire carattere valido.\n");
    
                   }
        } while (scelta != 0);
        
        return (EXIT_SUCCESS);
    }
  • Re: Aiuto programma esercitazione strutture e funzioni

    Ma non sarebbe meglio iniziare con qualcosa di più basilare visto che non sai nemmeno usare i puntatori?
  • Re: Aiuto programma esercitazione strutture e funzioni

    skelter94 ha scritto:


    ma non sarebbe meglio iniziare con qualcosa di più basilare visto che non sai nemmeno usare i puntatori?
    ho risolto. il mio errore grave era che leggevo un carattere come intero...altro errore nella scanf quando leggevo la stringa mettevo &...invece per le stringhe va omessa.
  • Re: Aiuto programma esercitazione strutture e funzioni

    Mi è venuto un dubbio, nome, cognome e nazionalità vanno in una funzione differente fa quella del titolo ?
    perchè mettendoli nella stessa struttura mi da come errore quello che scrivo.
  • Re: Aiuto programma esercitazione strutture e funzioni

    minomic ha scritto:


    oregon ha scritto:


    Rivedi anche la quantità di dati ... il codice ISBN non può essere di 500 caratteri !
    Giusto: sono solo 13. Link.
    minomic ho fatto il programma per intero, l' unica cosa è che non mi segnala nessun errore, però non compila. Sarà mica un problema del mio compilatore O.o
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define ID 50
    #define DIM 500
    #define LUNG_NOME 20
    #define LUNG_COGNOME 30
    #define LUNG_MAX_ARCHIVIO 300
    
    
    typedef struct {
    char nome[LUNG_NOME];
    char cognome[LUNG_COGNOME];
    char nazionalita[DIM];
    } autore;
    
    typedef struct {
    char ISBN[13];
    char titolo[DIM];
    autore lista_autori;
    } libro;
    
    typedef struct {
        char nome[LUNG_NOME];
        char cognome[LUNG_COGNOME];
        char codice_cliente[ID];
        libro lista_libri[10];
    } cliente;
    
    typedef struct {
        cliente clienti[LUNG_MAX_ARCHIVIO];
        int progressivo;
        int totale;
    } archivio_clienti;
    
    
    int compila_cliente(cliente *_cliente);
    int inserisci_cliente(cliente _nuovo_cliente, archivio_clienti *_arc_clienti);
    int inserisci_libro(libro _nuovo_libro, archivio_clienti *_arc_clienti);
    int check_cliente(char _codice_cliente[], archivio_clienti _arc_clienti);
    int compila_libri(libro *nuovo_libro);
    int inserisci_tesseramento(cliente _nuovo_tesseramento, archivio_clienti *_arc_clienti);
    int mostra_tesseramento_cliente(char _codice_cliente[], archivio_clienti _arc_clienti);
    int mostra_clienti(archivio_clienti arc_clienti);
    
    /*
    *
    */
    
    int main(int argc, char** argv) {
        int scelta;
        int i;
        archivio_clienti arc_CLIENTI;
        cliente nuovo_cliente;
        libro inserisci_libro;
        libro nuovo_libro;
        archivio_clienti arc_libri;
        autore nome_autore;
       arc_CLIENTI.progressivo = 0;         
       
       
        do {
            system("clear");
            printf("****BIBLIOTECA****\n\n");
            printf("1. Inserisci nuovo libro\n");
            printf("2. Tessera cliente\n");
            printf("3. Prestito di un libro\n");
            printf("4. Visualizza prestiti di un cliente\n");
            printf("5. Visualizza libri\n");
            printf("0. Esci\n\n");
           
            printf("\tScelta: ");
            scanf("%d", &scelta);
           
            switch (scelta) {
                case 1:
                 system("clear");
                 printf("ISBN: ");
                    scanf("%s", nuovo_cliente.codice_cliente);
                    if (check_cliente(nuovo_cliente.codice_cliente, arc_CLIENTI) == 1) {
                        compila_cliente(&nuovo_cliente);
                        if (inserisci_cliente(nuovo_cliente, &arc_CLIENTI) == 1)
                            printf("Errore: archivio pieno!\n");
                    } else
                        printf("Cliente gia' presente\n");
                   
                    getchar();
                    getchar();
                    break;
       
                    case 2:
                    system("clear");
                    printf("Codice fiscale del cliente: ");
                    scanf("%s", nuovo_cliente.codice_cliente);
                    
                    
                    switch (scelta) {
    
                            case 1:
                                system("clear");
                                compila_cliente(&nuovo_cliente);
                                strcpy(nuovo_cliente.codice_cliente, inserisci_libro.ISBN);
                                inserisci_cliente(nuovo_cliente, &arc_CLIENTI);
                                compila_libri(&nuovo_libro);
                                
                                getchar();
                                getchar();
                               
                                break;
    
                            default:
                                printf("Scegli un'opzione valida\n");
                               
                        }
                 
                    break;
                   
            case 0:
                printf("Arrivederci, alla prossima ;)\n");
                break;
               
                default:
                   printf("Carattere errato: Inserire carattere valido.\n");
    
                   }
        } while (scelta != 0);
       
        return 0;
    }
    
    int compila_cliente(cliente *_cliente) {
        printf("Nome: ");
        scanf("%s", _cliente->nome);
        printf("Cognome: ");
        scanf("%s", _cliente->cognome);
    }
    
    int compila_libro(libro *nuovo_libro) {
        int i;
        printf("Libri\n");
        printf("Titolo: ");
        scanf("%s", nuovo_libro->titolo);
        
        printf("Autore:\n");
        printf("Nome: ");
        scanf("%s", nuovo_libro->lista_autori);
        printf("Cognome: ");
        scanf("%s", nuovo_libro->lista_autori);
        printf("nazionalita': ");
        scanf("%s", nuovo_libro->lista_autori);
       
        }
    
    int inserisci_cliente(cliente _new_cliente, archivio_clienti *_arc_clienti) {
        if (_arc_clienti->progressivo < LUNG_MAX_ARCHIVIO) {
            _arc_clienti->clienti[_arc_clienti->progressivo] = _new_cliente;
            _arc_clienti->progressivo++;
            return 0;
        } else
            return 1;
    }
    
    int check_cliente(char _codice_cliente[], archivio_clienti _arc_clienti) {
        int i = 0;
        while (i < _arc_clienti.progressivo && strcmp(_codice_cliente, _arc_clienti.clienti[i].codice_cliente) != 0)
            i++;
        if (i < _arc_clienti.progressivo)
            return 0;
        else
            return 1;
    }
  • Re: Aiuto programma esercitazione strutture e funzioni

    In realtà il compilatore dovrebbe riportarti parecchie cose:
    main.c: In function ‘main’:
    main.c:59:12: warning: unused variable ‘nome_autore’ [-Wunused-variable]
    autore nome_autore;
    ^
    main.c:58:22: warning: unused variable ‘arc_libri’ [-Wunused-variable]
    archivio_clienti arc_libri;
    ^
    main.c:53:9: warning: unused variable ‘i’ [-Wunused-variable]
    int i;
    ^
    main.c: In function ‘compila_libro’:
    main.c:149:5: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘autore’ [-Wformat=]
    scanf("%s", nuovo_libro->lista_autori);
    ^
    main.c:151:5: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘autore’ [-Wformat=]
    scanf("%s", nuovo_libro->lista_autori);
    ^
    main.c:153:5: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘autore’ [-Wformat=]
    scanf("%s", nuovo_libro->lista_autori);
    ^
    main.c:142:9: warning: unused variable ‘i’ [-Wunused-variable]
    int i;
    ^
    main.c: In function ‘compila_cliente’:
    main.c:138:1: warning: control reaches end of non-void function [-Wreturn-type]
    }
    ^
    main.c: In function ‘compila_libro’:
    main.c:155:1: warning: control reaches end of non-void function [-Wreturn-type]
    }
    ^
    /tmp/cc0FA5El.o: nella funzione "main":
    main.c:(.text+0x298): riferimento non definito a "compila_libri"
    collect2: error: ld returned 1 exit status
    In particolare guarda in fondo: riferimento non definito a "compila_libri". Ecco il tuo errore.
Devi accedere o registrarti per scrivere nel forum
59 risposte