Newsgroup: it.comp.lang.c
Titolo: problema con le liste

Salve a tutti, sono un neofita di c. Sto programmando una lista che abbia la
possibilitá di inserimento di utenti, la cancellazione di un utente dopo
aver inserita l'etá (key) , la cancellazione di tutti gli utenti aventi una
data etá e la stampa della lista. Ora il problema sorge nel momento in cui
inserisco gli elementi e tutto procede(almeno sembra!!!) per il meglio, ma
quando vado a visualizzare il risultato su video non mi appare. Mi potete
aiutare cortesemente? Ho allegato anche il sorgente. Ringrazio
anticipatamente per l'attenzione prestata.
#Ale Mag
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef char String[20];
typedef struct elem *pElem;
typedef struct elem {
     String nome;
     String cognome;
     int eta;
     pElem next;
     } Elemento;
typedef struct elem *pList; /*dichiarazione di una lista*/
pList initList(){
      return NULL;
      }
pList aggiungi(pList list, String n, String c, int e)
    {
    pElem p;
    p = (pElem) malloc (sizeof(Elemento));
    strcpy(p->nome, n);
    strcpy(p->cognome, c);
    p->eta = e;
    p->next = list;
    return p;
    }
pElem ricerca (pList list, int e, pElem *pp)
    { pElem p = list;
      *pp = NULL;
      while(p){if (p->eta==e) break;
              *pp = p;
              p = p->next;
              } /*fine ciclo while*/
      return p;
    }
pList cancella (pList list, int e)
    {
    pElem pers, pre_pers, succ_pers;
    pers=ricerca(list,e,&pre_pers); /*in pers c'é la posizione del record
precedente
              a quello cercato*/
    if(pers){
      succ_pers = pers->next;
      if(pre_pers){
         pre_pers->next =  succ_pers;
         free(pers);
          }
     else{
      free(pers);
      list = succ_pers;
      }/*chiusura else*/
      }/*chisura if*/
    return list;
    } /*fine della funzione cancella*/
void stampa (pList list){
      pElem p = list;
      while (p){
         printf("\n Nome: %s",p->nome);
         printf("\n Cognome: %s",p->cognome);
         printf("\n Eta': %d\n",p->eta);
         p=p->next;
         }/*chiusura del while*/
         printf("\n");
         }
main(){
 int scelta;
 pList Lista = initList();
  do{
    clrscr();
    printf("**********Menu'**********\n");
    printf("1: aggiungi record \n");
    printf("2: cancella record \n");
    printf("3: cancella tutti i record \n");
    printf("4: stampa gli elementi \n");
    printf("5: esci \n");
    printf("Inserisci la tua scelta: ");
    scanf("%d",&scelta);
    switch(scelta){
          case 1:{
            String nom,cogn;
            int eta;
            clrscr();
            printf("Inserisci il nome: ");
         scanf("\n %s",&nom);
         printf("Inserisci il cognome: ");
         scanf("\n %s",&cogn);
         printf("Inserisci l'eta': ");
         scanf("\n %d",&eta);
         Lista=aggiungi(Lista,nom,cogn,eta);
            } break;
          case 2:{
            int eta;
            clrscr();
            printf("Inserisci l'eta' dell'utente che vuoi cancellare: ");
            scanf("\n %d",&eta);
            Lista = cancella(Lista,eta);
            } break;
          case 3:{} break;
          case 4: {
           stampa(Lista);
               } break;
          default : break;
          } /*fine dello swith*/
    }    /*fien ciclo do-while*/
  while (scelta!=5);
  return 0;
      }

       }
Cambiato questo, a me funziona il programma, ed in effetti mi pare 
corretto. Cmq, suvvia, con un po' di debug si trovavano questi errori :).
-- 
Mat/tia Belletti - Undergraduate student @ 
cs.unibo.it
ICQ: 33292311    - email: 
mbel...@cs.unibo.it
IRC: RedGlow     - site(s): 
http://www.cs.unibo.it/~mbellett
Linux registered user 299762 @ Linux registered machine 213003

 ha scritto nel messaggio
news:c8u6bh$5mk$1...@le1.cs.unibo.it...


se lascio peró il codice come l'ho fatto e metto l'indice a nome e cognome,
cioé nom[20], cogn[20], adesso funziona!
cioé ho messo:
 case 1:{
            String nom[20],cogn[20];  /*qui ho effettuato la modifica*/
            int eta;
            clrscr();
            printf("Inserisci il nome: ");
         scanf("\n %s",&nom);
         printf("Inserisci il cognome: ");
         scanf("\n %s",&cogn);
         printf("Inserisci l'eta': ");
         scanf("\n %d",&eta);
         Lista=aggiungi(Lista,nom,cogn,eta);
            } break;
Non so se era questa la modifica che mi avevi suggerito, perché non avevo
ben capito la risposta!Scusami e grazie tante
#Ale Mag