Newsgroup: it.comp.lang.c
Titolo: boh ???

Mi pare cosě strano .... leggete qui:
struct nodo *leggi_lista(void) {
 struct nodo *p, *primo=NULL;
   int x, n, i;
   printf("Quanti numeri interi vuoi introdurre? n = ");
   scanf("%d ", &n);
   for (i=0 ; i<n ; i++){
    printf(" Introduci l'elemento %d della lista : ", n-i);
      scanf("%d", &x);
      p=(nodo*) malloc (sizeof(nodo));
      p->info = x;
      p->next=primo;
      primo=p;
   }
   return(primo);
}
E' una semplicissima funzione leggi lista , secondo me dovrebbe chiedermi
quanti numeri voglio inserire e poi ... Introduci l'elemento 1 , introduci
l'elem 2 e cosě via ....
Invece mi chiede quanti numeri voglio inserire e poi lampeggia io metto un
altro numero e poi compare :
Introduci l'elemento 1 della lista :    Introduci l'elemento due della
lista: _
e io inserisco il secondo elemento..
non so se sono stata chiara...... :-)
insomma non fa subito il printf ma prima lo scanf e poi due printf!
Spero di essermi spiegata.
 Grazie Robby


Ti apparirà tutto più chiaro se inizierai a familiarizzare con il debugger.
Ti permette di eseguire il codice riga per riga, constatando per ogni volta
le gli effetti delle varie istruzioni.

   scanf("%d ", &n);
Il problema e' lo spazio che hai inserito dopo "%d".
Con quella istruzione stai dicendo che vuoi leggere
un numero seguito da un insieme di quelli che nella
definizione del C sono chiamati "white spaces" (che
includono il newline); quindi sino a quando in input
non si presenta un carattere diverso da uno spazio, un
tab oppure un a-capo il programma resta su quella
istruzione.
Al primo carattere "significativo" passa oltre (senza
perdere il carattere) e quindi arriva alla printf e
alla seconda scanf. Nota anche che l'inserimento da
tastiera avviene per linee e quindi il programma
passa oltre solamente quando hai inserito il secondo
numero per intero e hai premuto Invio.
HTH
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

 }
scusate, ma non capisco una cosa:
gli elementi della lista sono inseriti dall'ultimo al primo e la procedura
restituisce il primo elemento della lista; fin qui credo di avere capito
bene (spero).
una volta che ho il primo elemento della lista pero' , non posso scorrere la
lista in quanto questo non punta ad alcun elemento.
e' infatti il secondo elemento che punta al primo, e non viceversa. 
di conseguenza perdo tutti gli elementi inseriti nella lista.
sbaglio qualcosa? 
saluti
lorenzo
_______________________________________________________
Excite Inbox: la tua email gratuita e personalizzabile
http://inbox.excite.it
Il Mio Excite
http://www.excite.it
A.A.A. Relazioni: trovare l'amore non è mai stato più facile
http://aaa.excite.it/relazioni
-- 
Posted from 
kuku-rwcmta.excite.com
 [198.3.99.63] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 lista in quanto questo non punta ad alcun elemento.
non farti ingannare dai nomi delle variabili:
p->next=primo;
il nuovo elemento 'p' ha come successore il primo della lista fino a
quel momento.
cioe' e' stato inserito in testa.
poi nella riga dopo lui diventa il primo:
primo=p;
a me sembra giustissimo.
ciao
donCiccio

Ti apparirà tutto più chiaro se inizierai a familiarizzare con il debugger.
Per cortesia, evita di ripostare tutto il corpo del messaggio a cui
stai rispondendo e quota solo le righe che sono strettamente
necessarie a dare un senso alle tue parole.
Grazie ;)