|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Apr 2007
Città: Torino
Messaggi: 95
|
[C] problema con strutture
Ciao a tutti. dovrei implementare una funzione lista leggi(void) che legga da tastiera e inserisca in una lista i numeri scelti dall utente fino al primo negativo(che non viene inserito).
Ritorna il puntatore al nodo di testa. La lista deve avere memoria dinamica La struttura del nodo è questa: typedef struct nodo *lista; struct nodo { int x; /* Informazione */ lista next; /* Puntatore al nodo successivo. */ }; Qualcuno mi può aiutare??? ![]() Ultima modifica di gigippa : 25-05-2007 alle 16:22. |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Mar 2004
Messaggi: 16053
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Apr 2007
Città: Torino
Messaggi: 95
|
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Mar 2004
Messaggi: 16053
|
|
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Apr 2007
Città: Torino
Messaggi: 95
|
Avevo pensato a una cosa del genere ma non va
printf("Inserisci la prima lista: "); int n=100; int i; int k; for(i=0;i<n; i++) if(k>0){ scanf("%d", L[0].x); |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Mar 2004
Messaggi: 16053
|
Pare che tu non abbia proprio la benché minima idea di come si gestisca una lista e neppure come si effettui l'allocazione dinamica di una elemento in memoria. Il codice qui sotto è un esempio che fa più o meno quello che ti veniva richiesto, la differenza è che lo fa senza utilizzare una funzione. A te il compito di capirlo e modificarlo opportunamente.
![]() Codice:
#include <stdio.h> #include <stdlib.h> typedef struct node *element; struct node { int info; element next; }; int main() { element list = NULL; element insert = NULL; int info = 0; scanf("%d", &info); while(info >= 0) { if(list == NULL) { insert = (element)malloc(sizeof(element)); insert->info = info; insert->next = NULL; list = insert; } else { insert->next = (element)malloc(sizeof(element)); insert = insert->next; insert->info = info; insert->next = NULL; } scanf("%d", &info); } return(0); } |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Apr 2007
Città: Torino
Messaggi: 95
|
Grazie per l' aiuto! Adesso stavo provando a fare una funzione void stampa(lista L) che stampi tutti i numeri contenuti nella lista
La mia idea era questa void stampa(lista L) { while(L->next !=NULL) printf("%d", L->x); } Ma ci sono dei problemi. Mi dai una dritta? grazie |
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Mar 2004
Messaggi: 16053
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Apr 2007
Città: Torino
Messaggi: 95
|
A parte quello quando faccio girare il programma mi si inchioda! Legge correttamente ma quando si tratta di stampare va in crash
|
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: Feb 2006
Messaggi: 134
|
|
![]() |
![]() |
![]() |
#11 |
Member
Iscritto dal: Apr 2007
Città: Torino
Messaggi: 95
|
va in crash. Mi dice che si è verificato un errore e che l' applicazione verrà chiusa
|
![]() |
![]() |
![]() |
#12 |
Member
Iscritto dal: Feb 2006
Messaggi: 134
|
|
![]() |
![]() |
![]() |
#13 |
Member
Iscritto dal: Apr 2007
Città: Torino
Messaggi: 95
|
|
![]() |
![]() |
![]() |
#14 |
Member
Iscritto dal: Feb 2006
Messaggi: 134
|
|
![]() |
![]() |
![]() |
#15 |
Member
Iscritto dal: Apr 2007
Città: Torino
Messaggi: 95
|
Quindi devo cambiare la condizione del while. Se però metto L->x != NULL non cambia nulla
|
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Mar 2004
Messaggi: 16053
|
Prova con:
Codice:
... while(list != NULL) { printf("%d", list->info); list = list->next; } ... ![]() PS: attento al passaggio per indirizzo del parametro list della funzione di lettura, ogni modifica che si fa nella funzione si ripercuote sul parametro. |
![]() |
![]() |
![]() |
#17 |
Member
Iscritto dal: Apr 2007
Città: Torino
Messaggi: 95
|
Cambiando le variabili che tu hai messo con quelle del mio programma ho messo così
void stampa(lista L) { while(L!= NULL) printf("%d", L->x); L = L->next; } Ma non funziona lo stesso |
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Mar 2004
Messaggi: 16053
|
Menomale che non funziona... ti mancano delle parentesi {} .
![]() Oltretutto non hai neppure seguito il consiglio che ti avevo dato di copiare il valore del parametro che passi alla funzione in una variabile locale della funzione. ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:32.