Inserimento in lista e sottolista

di il
19 risposte

19 Risposte - Pagina 2

  • Re: Inserimento in lista e sottolista

    Perfetto ho capito benissimo quello che hai fatto, grazie mille.
    Per quanto riguarda il messaggio precedente sul system("cls"), sai come potrei risolvere?
  • Re: Inserimento in lista e sottolista

    peppe1992 ha scritto:


    Se inserisco system("cls") per pulire il prompt dopo la visualizzazione del menù, il programma termina quando eseguo la stampa, quindi non quando viene eseguito il system("cls") ma verso la fine del programma, dandomi: "si è verificato un errore.... "(la classica schermata di windows che appare quando si blocca un programma) , tutto questo senza il system("cls") non accade. Non è un problema di inclusione di librerie perché il comando funziona perfettamente.
    lo fa' anche con la modifica del while ?
    nel caso lo facesse posta sia codice che l'errore.
  • Re: Inserimento in lista e sottolista

    Col ciclo while non mi riappare il menù dopo l'inserimento e quindi non mi permette la stampa.
    Questo è il codice
    
    #include <stdio.h>
    #include <stdlib.h>
    
    
    
    
    /***** S T R U T T U R E ******/
    struct sotto_nodo
    {
        char carattere;
        struct sotto_nodo *nextPtr1;
    };
    
    struct nodo
    {
        int intero;
        struct nodo *nextPtr;               //puntatore al nodo successivo
        struct sotto_nodo *sottonodoPtr;   //puntatore al tipo struct sotto_nodo di nome sottonodoPtr
    
    };
    
    /****** T Y P E D E F ******/
    
    typedef struct sotto_nodo SottoNodo;
    typedef struct nodo Nodo;
    
    typedef SottoNodo *SottoNodoPtr;
    typedef Nodo *NodoPtr;
    
    /****** P R O T O T I P I    D I     F U N Z IO N E ******/
    
    void menu();
    NodoPtr crea_lista(int elemento1);
    void inserisci_lista (NodoPtr *head, int elementi);
    NodoPtr trova (NodoPtr head, int elemento);
    void inserisci_sottolista (SottoNodoPtr *head1, char caratteri);
    void stampa(NodoPtr testalistaPtr);
    void clear();
    
    /****** M A I N ******/
    
    int main (void)
    {
        NodoPtr testaPtr = NULL;
        NodoPtr copia_testaPtr = NULL;
    
        char scelta1;
    
        int scelta=0;
        while (scelta<1 || scelta>3)
        {
        menu();
        printf("Fai una scelta: ");
        fflush(stdin);
        scanf("%d", &scelta);
    
        switch (scelta)
    
            {
                case 1:
                    {
    
                    int i;
                    char j;
                    int elelista;
                    int elem1;
                    printf("Inserisci il primo elemento: ");
                    fflush(stdin);
                    scanf("%d", &elem1);
    
                    testaPtr = crea_lista(elem1);
                    if (testaPtr != NULL)
                    {
                        copia_testaPtr = testaPtr;
    
                        do
                        {
    
                        printf("Vuoi inserire ulteriori elementi? S o N: ");
                        fflush(stdin);
                        scanf("%c", &scelta1);
    
                            if (scelta1 == 's' || scelta1 == 'S')
                            {
                                printf("Inserisci elemento: ");
                                fflush(stdin);
                                scanf("%d", &i);
                                inserisci_lista(&testaPtr, i);
                            }
                        }
                        while (scelta1 == 's' || scelta1 == 'S');
    
                            if (scelta1 == 'n' || scelta1 == 'N')
                            {
                            printf("Vuoi inserire elementi nella sottolista? S o N: ");
                            fflush(stdin);
                            scanf("%c", &scelta1);
                                if (scelta1 == 's' || scelta1 == 'S')
                                {
                                    printf("In quale elemento della lista principale?: ");
                                    fflush(stdin);
                                    scanf("%d", &elelista);
                                    copia_testaPtr = trova(testaPtr, elelista);
                                    if (copia_testaPtr != NULL)
                                    {
    
                                        printf("\nTrovato l'elemento: %d \n\nInserisci il primo elemento: ", copia_testaPtr->intero);
                                        fflush(stdin);
                                        scanf("%c", &j);
                                        inserisci_sottolista(&(copia_testaPtr->sottonodoPtr), j);
    
                                    }
    
                                    do
                                    {
                                    printf("Vuoi inserire ulteriori elementi? S o N:");
                                    fflush(stdin);
                                    scanf("%c", &scelta1);
                                    if (scelta1 == 's' || scelta1 == 'S')
                                    {
                                        printf("Inserisci elemento successivo: ");
                                        fflush(stdin);
                                        scanf("%c", &j);
                                        inserisci_sottolista(&(copia_testaPtr->sottonodoPtr), j);
    
                                    }
                                }
                                while (scelta1 == 's' || scelta1 == 'S');
                            }
                            else
                                printf("Scelta errata!\n");
                        }
                        else
                            printf("Impossibile allocare la memoria!\n");
                    }
                    }
                break;
    
                case 2:
                    {
                    if (testaPtr==NULL)
                    {
                        printf("errore lista non caricata\n");
                        break;
                    }
                    else
                        stampa(testaPtr);
                    }
                break;
    
    
            }
        }
    
    free(testaPtr);
    free(copia_testaPtr);
    
    system("pause");
    return 0;
    }
    
    
    /****** I M P L E M E N T A Z I O N E   F U N Z I O N I ******/
    
    
    void menu()
    {
        printf("[1] - Per inserire gli elementi nella lista\n");
        printf("[2] - Per stampare la lista\n");
        printf("[3] - Per terminare il programma\n");
    };
    
    
    NodoPtr crea_lista (int elemento1)
    {
    NodoPtr headPtr = malloc(sizeof(Nodo));
    
    headPtr->intero = elemento1;
    headPtr->nextPtr = NULL;
    headPtr->sottonodoPtr = NULL;
    
    return headPtr;
    
    };
    
    void inserisci_lista (NodoPtr *head, int elementi)
    {
        NodoPtr newPtr = malloc(sizeof(Nodo));
        newPtr->intero=elementi;
        newPtr->nextPtr = *head;
        *head = newPtr;
    };
    
    NodoPtr trova (NodoPtr head, int elemento)
    {
        while (head->intero != elemento && head != NULL)
        {
            head = head->nextPtr;
        }
        if (head->intero == elemento)
            return head;
        else
            return NULL;
    };
    
    void inserisci_sottolista (SottoNodoPtr *head1, char caratteri)
    {
       SottoNodoPtr newPtr = malloc(sizeof(SottoNodo));
       newPtr->carattere = caratteri;
       newPtr->nextPtr1 = *head1;
       *head1 = newPtr;
    };
    
    void stampa(NodoPtr testalista)
    {
        printf("head -> ");
        NodoPtr copia_testa = testalista;
        while (testalista != NULL)
        {
            printf("%d -> ", testalista->intero);
            testalista = testalista->nextPtr;
        }
        printf("NULL\n");
    
    
        while (copia_testa != NULL)
        {
        printf("headsub -> (%d) -> ", copia_testa->intero);
    
        while (copia_testa->sottonodoPtr != NULL)
        {
            printf("%c -> ", copia_testa->sottonodoPtr->carattere);
            copia_testa->sottonodoPtr = copia_testa->sottonodoPtr->nextPtr1;
        }
        printf("NULL\n");
        copia_testa = copia_testa->nextPtr;
        }
    };
    
    
    
    
  • Re: Inserimento in lista e sottolista

    Nel case 1 come nel case 2 c'è questo errore:
                  }
                break;
                
    e la correzione è esattamente al contrario cioè
    
    break;
    }
    
    effettua la modifiche e fammi sapere.
  • Re: Inserimento in lista e sottolista

    Fatto anche questo, stesso problema
Devi accedere o registrarti per scrivere nel forum
19 risposte