Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    8

    [C] Lista inserire frase carattere per carattere

    Ciao a tutti,

    Ho questo esercizio da fare, ho pensato a un modo ma che per me era giusto, ma il programma parte e dice che ha smesso di funzionare quando faccio la visualizzazione, quando cerco di far andare la procedura di inserimento, non mi fa vedere neppure il printf, come quando c'è un system(cls).
    Quando faccio la visualizzazione, visualizza solo il numero di elementi creati ma vuoti.
    Inoltre credo che il fatto del ciclo while nell'inserimento sia sbagliato.
    Potreste darmi qualche dritta?
    Non deve essere difficile come esercizio ma queste liste sono una brutta rogna.
    codice:
    /* Data in input una frase costruire una frase carattere per carattere
    salvare la frase in una lista in cui ogni elemento si salva un carattere
    
    Sulla lista fare le procedure:
    
    1 visualizzazione
    2 inserimento di un nuovo carattere
    3 cancellazione di un carattere */
    
    #include <stdio.h>
    #include <malloc.h>
    #include <string.h>
    
    // DICHIARAZIONE 
    
    struct elemento {
        char inf;
          struct elemento *punt;//PUNTA AL PROSSIMO NODO
    };
    
          struct elemento *p0;
          char sc;
          char frase [15];
    
    void crealista(struct elemento **p0)
    {
    *p0=NULL;//LISTA VUOTA
    }
    
    
    struct elemento *inserimentoInTesta(struct elemento *p0)
    {
        struct elemento *p;
        int k=0;
        
        printf("inserire una frase\n");
        scanf("%c", & frase);
    
          
        p=(struct elemento*)malloc(sizeof(struct elemento));
        while(k<=15)
        {
         p->inf=frase[k];
         k++;
        }
    
        if(p0==NULL)//VUOTA..
        {
            p0=p;
            p->punt=NULL;
        }
        else //INSERIMENTO IN TESTA
    {
        p->punt=p0;
        p0=p;
    
    }
    return p0;
    }
    
    void VisualizzaLista(struct elemento *p0)
    {
    
       if(p0==NULL){printf("lista vuota");}
       else{
            printf("lista -> ");
    
            // CICLO FINCHE' NON E' VUOTA 
            while(p0 != NULL)
            {
            printf("[%c]", p0->inf); // VISUALIZZA L'INFORMAZIONE
            printf(" -> ");
            p0 = p0->punt; // SCORRE DI UN ELEMENTO
            }
            }
           printf("NULL\n");
    
    }
    
    struct elemento *CancellazionePrimoElemento(struct elemento *p0)
    {
         struct elemento *h;
         
         if(p0==NULL){printf("lista vuota");}
         else{
         h=p0;
         p0=p0->punt;
         free(h);          
             }
             
         return p0;
    
    }
    
    struct elemento *CancellazioneInCoda(struct elemento *p0)
    {
           struct elemento *h, *p;
           
           if(p0==NULL)
           {printf("lista vuota");}
           if(p0->punt==NULL)
           { p0=NULL; 
           free(p0);}
           else{
                h=p0;
                while(h->punt!=NULL)
                {
                p=h;
                h=h->punt;                    
                }
                p->punt=NULL;
                free(h);
                }  
                return p0;      
    }
    main()//GESTIONE A MENU
    {
        crealista(&p0);
        do
        {
        system("cls");
        printf("\t- MENU -\n");
      
        printf("Premi 1 per inserire una frase in testa!\n");
        printf("Premi 2 per cancellare il primo elemento.\n");
        printf("Premi 3 per cancellare l'ultimo elemento.\n");
        printf("Premi 4 per visualizzare la lista.\n");
        printf("Premi S per uscire... \n ");
    
     scanf("%c", &sc);
    
     
        if(sc=='4') { VisualizzaLista(p0);system("pause");}
        if(sc=='1') {p0=inserimentoInTesta(p0);}
        if(sc=='2') {p0=CancellazionePrimoElemento(p0);}
        if(sc=='3') {p0=CancellazioneInCoda(p0);}
        }
        while(sc!='s');
    
    
    }
    Grazie.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    char inf

    è un singolo carattere, non una stringa.
    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.