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

    [C] Liste inserimento e visualizzazione

    Ciao a tutti,

    Devo fare un esercizio con le liste bidirezionali, in cui inserisco delle parole in testa ma il problema è che quando aggiungo la gestione a menù, eseguo il programma e inserisco una parola, la procedura di inserimento non viene eseguita, e quando provo a visualizzare, mi visualizza gli elementi della lista vuoti.
    Questo accade solo quando inserisco la gestione a menù nel programma, se uso il main con richiamo di procedure e basta, funziona tutto.

    codice:
    /*           -BIDREZIONALI-
    Inserimento in testa di una parola
    Inserimento in coda
    cancellazoine in coda
    cancellazione in testa
    stampa delle parole dalla prima all'ultima e viceversa */
    
    #include <stdio.h>
    #include <malloc.h>
    #include <string.h>
    
    // DICHIARAZIONE
    
    struct elemento {
          char info [20];
          struct elemento *suc;//PUNTA AL PROSSIMO NODO
          struct elemento *prec;//PUNTA AL PRECEDENTE
    };
    
          struct elemento *p0;
          char parola [20], sc;
    
    
    void crealista(struct elemento **p0)
    {
         *p0=NULL;//LISTA VUOTA
    }
    
    struct elemento *inserimento_in_testa(struct elemento *p0)
    {
         struct elemento *p;
    
         printf("inserire parola:\t");
         gets(parola);
         p=(struct elemento*)malloc(sizeof(struct elemento));
         strcpy(p->info,parola);
         if(p0==NULL)
         {
                     p0=p;
                     p->prec=NULL;
                     p->suc=NULL;
         }
         else{
                     p0->prec=p;
                     p->suc=p0;
                     p->prec=NULL;
                     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("[%s]", p0->info); // VISUALIZZA L'INFORMAZIONE
            printf(" -> ");
            p0 = p0->suc; // SCORRE DI UN ELEMENTO
            }
            }
           printf("NULL\n");
    
    }
    
    
    
        main()//GESTIONE A MENU
    {
        crealista(&p0);
        do
        {
        system("cls");
        printf("\t- MENU -\n");
        printf("Premi 1 per inserire un parola in testa!\n");
        printf("Premi 2 per visualizzare la lista.\n");
        printf("Premi S per uscire... \n ");
    
     scanf("%c", &sc);
    
    
        if(sc=='2') {VisualizzaLista(p0);system("pause");}
        if(sc=='1') {p0=inserimento_in_testa(p0);}
    
    
        }
        while(sc!='s');
    
    
    }

  2. #2
    Usa la gets al posto della scanf. Passagli un buffer relativamente grande e poi controlli solo il primo carattere letto.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    8
    Dato che sono nuovo del c, non ho capito cosa hai scritto, aparte il gets.
    potresti spiegarti meglio o dirmi le righe di codice che per te sono sbagliate?

  4. #4
    codice:
    scanf("%c", &sc);
    cambiala in
    codice:
    char buffer[80];
    gets(buffer); // o // fgets(buffer,80,stdout);
    
    if (buffer[0] == '1')
    //...
    //...
    //...
    while (buffer[0]); // o // while(buffer[0] != '\n');

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 © 2025 vBulletin Solutions, Inc. All rights reserved.