Creare una libreria con devc - Prime armi

di il
31 risposte

31 Risposte - Pagina 3

  • Re: Creare una libreria con devc - Prime armi

    E sì ma io non so più aiutarti perchè è corretto, a me funziona.

    Posso allegarti i file nuovamete.
    Ti faccio se vuoi notare le differenze tra scrivere la struct nel .h e nel .c
    client.c
    #include <stdio.h>
    #include <stdlib.h>
    #include "esercizio.h"
    
    int main() {
    
        int i;
        char *stringa,*a, *b;
        LISTAPUNTATA lista;
    
    
        stringa = (char *)calloc(100, sizeof(char));
        a = (char *)calloc(100, sizeof(char));
        b = (char *)calloc(100, sizeof(char));
        lista=NULL;
    
        //stringa="due";
        stringa=leggi();
        lista=inserimento(lista,stringa);
        //stringa="amore";
        stringa=leggi();
        lista=inserimento(lista,stringa);
        //stringa="ciao";
        stringa=leggi();
        lista=inserimento(lista,stringa);
        //stringa="un";
        stringa=leggi();
        lista=inserimento(lista,stringa);
    
        //printf("%s\n", lista->str); /* Attenta a questo */
    
    
        system("PAUSE");
        printf("La lista: \n");
        stampa(lista);
    
        printf("Inserisci x: ");
        scanf("%d", &i);
        a="un";
        b="amore";
    
        lista=cancellaparticolare(lista,i,a,b);
        stampa(lista);
        printf("\t\t*****FINE******\n");
        system("PAUSE");
        return 0;
    
    }
    
    esercizo.h
    #ifndef ESERCIZIO_H_INCLUDED
    #define ESERCIZIO_H_INCLUDED
    
    typedef struct listapuntata * LISTAPUNTATA;
    
    
    char * leggi (void);
    LISTAPUNTATA inserimento(LISTAPUNTATA lista, char *elem);
    void stampa(LISTAPUNTATA lista);
    LISTAPUNTATA cancellatutto(LISTAPUNTATA lista);
    LISTAPUNTATA cancella(LISTAPUNTATA lista, char *elem);
    LISTAPUNTATA cancellaparticolare(LISTAPUNTATA lista, int x, char *a, char *b);
    
    #endif // ESERCIZIO_H_INCLUDED
    esercizio.c
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "esercizio.h"
    
    typedef struct listapuntata {
        char *str;
        struct listapuntata *next;
    }listapuntata;
    
    char * leggi (void) {
        char *s = (char *)malloc(80*sizeof(char));
        printf("Introduci la stringa: ");
        scanf ("%s",s);
        return s;
    }
    
    LISTAPUNTATA inserimento(LISTAPUNTATA lista, char *elem) {
        if((lista==NULL) || ((strlen(lista->str))>(strlen(elem)))) {
            listapuntata *tmp=(listapuntata *)malloc(sizeof(listapuntata));
            tmp->str=elem;
            tmp->next=lista;
            return tmp;
        } else {
            lista->next=inserimento(lista->next,elem);
            return lista;
        }
    }
    
    
    void stampa(listapuntata *lista) {
        if (lista != NULL) {
            printf(" %s\n",lista->str);
            stampa(lista->next);
        } else {
            return;
        }
    }
    
    listapuntata *cancellatutto(listapuntata *lista) {
        if (lista!=NULL)
            lista=cancellatutto(lista->next);
        return lista;
    }
    
    listapuntata *cancella(listapuntata *lista, char *elem) {
        int val;
        if (lista!=NULL) {
            val=strcmp((lista->str),elem);
    
            if ( val!=0 ) {
                lista->next=cancella(lista->next,elem);
            } else if (val==0) {
                printf("TROVATA\n");
                listapuntata *tmp=(listapuntata *)malloc(sizeof(listapuntata));
                tmp=lista;
                lista=tmp->next;
                free(tmp);
            }
        }
       return lista;
    }
    
    listapuntata *cancellaparticolare(listapuntata *lista, int x, char *a, char *b) {
        int lung;
        if (lista!=NULL) {
            lung=(strlen(lista->str))-x;
    
            if ( ((lung%2) == 0) && ( (strlen(a)) < (strlen(lista->str)) && ( (strlen(a)) < (strlen(b)) ) ) ){
                printf("TROVATA\n");
                listapuntata *tmp=(listapuntata *)malloc(sizeof(listapuntata));
                tmp=lista;
                lista=tmp->next;
                free(tmp);
            }
            lista->next=cancellaparticolare(lista->next,x,a,b);
        }
        return lista;
    }
    
    
    Prova a spostare la struct e compilare. Noterai che quando la struct sta nel .h riesci ad accedere ai campi della struct, mentre se la sposti nel .c devi passare per forza dal puntatore e ai suoi campi non riesci ad accederci, quindi hai separato bene.
  • Re: Creare una libreria con devc - Prime armi

    Si grazie mille.. non va con devc.
    Code::Block non l'ho mai usato, ora provo a scaricarlo..
Devi accedere o registrarti per scrivere nel forum
31 risposte