Problema con la crezione di una lista in C

di il
9 risposte

Problema con la crezione di una lista in C

Salve a tutti, avrei un problema con le liste. Premetto che ho ripreso a programmare l'altro giorno in vista di un esame, ma ho iniziato ad avere problemi dove, fino a due mesi fa, non ne avevo: ho un problema con la creazione di liste per mezzo di funzioni. Praticamente, pur passando la lista ad una funzione tramite riferimento, alla fine della funzione la lista è vuota (anche se, effettivamente, nei vari passaggi della funzione vedevo la lista riempirsi tranquillamente). Allego il codice del programma, spero che qualcuno possa dirmi dove sbaglio o comuque quale sia il problema. P.S programmo in C con visual studio 2017, nel caso servisse saperlo.

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<stdlib.h>


typedef struct nodo {
	int info;
	struct nodo *next;
}tiponodo, *list;


list crealista();
list inserisciinlista(list *lista);
void stampalista(list lista);

int main() {
	list lista;
	lista = crealista();
	inserisciinlista(&lista);
	stampalista(lista);
}

list crealista() {
	return NULL;
}

list inserisciinlista(list *lista) {
	int dim, i = 0;
	int a = 0;
	list ultimo, aux;
	
	
	printf("quanti numeri vuoi inserire?\n");
	scanf("%d", &dim);
	while (i < dim) {
		if ((*lista) == NULL) {
			aux = (tiponodo*)malloc(sizeof(tiponodo));
			printf("inserisci numero\n");
			scanf("%d", &aux->info);
			aux->next = NULL;
			lista = aux;
		}
		else {
			ultimo = lista;
			while (ultimo->next != NULL) {
				ultimo = ultimo->next;
			}
			aux = (tiponodo*)malloc(sizeof(tiponodo));
			printf("inserisci numero\n");
			scanf("%d", &aux->info);
			aux->next = NULL;
			ultimo->next = aux;
			ultimo = aux;
		}
		i++;
		
	}
}

void stampalista(list lista) {
	while ((&lista) != NULL) {
		printf("%d\n", lista->info);
		lista = lista->next;
	}
}

9 Risposte

  • Re: Problema con la crezione di una lista in C

    'stampalista' e' sbagliata.
    Se non stampa nulla e' solo perche' hai una fortuna sfacciata.
    In tutti gli altri casi l'applicazione avrebbe dovuto andare in errore in malo modo
  • Re: Problema con la crezione di una lista in C

    migliorabile ha scritto:


    'stampalista' e' sbagliata.
    Se non stampa nulla e' solo perche' hai una fortuna sfacciata.
    In tutti gli altri casi l'applicazione avrebbe dovuto andare in errore in malo modo
    so che stampa lista è sbagliata, devo correggerlo, il mio problema, come ho detto prima, è crealista: nel corpo della funzione effettivamente la lista viene creata, quando però il programma esce dalla funzione passa a stampa lista una lista che non contiene nulla, indipendentemente che io passi la lista, il puntatore alla lista, o l'indirizzo di memoria della lista.
  • Re: Problema con la crezione di una lista in C

    Ma che stai a di?
    Crealista crea la lista vuota ed e' giusto
    Caso mai e' sbagliata inserisciinlista.

    Inoltre 'inserisciinlista' DEVE SOLO inserire un elemento nella lista.
    NON E' SUA RESPONSABILITÀ ricuperare i valori!
    La tua implementazione e' INUTILMENTE INCASINATA perche' contiene del codice che con la gestione della lista NON CENTRA UNA CIPPA!
    Riorganizza il codice!
  • Re: Problema con la crezione di una lista in C

    Inserisciinlista restituisce un valore o no?

    Perché inserisciinlista si occupa di tutti gli elementi (con tanto di input da tastiera) e non si occupa di un solo elemento?

    L'input lo fai nel main.
  • Re: Problema con la crezione di una lista in C

    oregon ha scritto:


    Inserisciinlista restituisce un valore o no?

    Perché inserisciinlista si occupa di tutti gli elementi (con tanto di input da tastiera) e non si occupa di un solo elemento?

    L'input lo fai nel main.
    perchè nella traccia d'esame mi si chiede che data un funzione, io passi semplicemente la lista e tutti i valori devono essere inseriti dalla funzione, ma senza che io le passi i valori dal main, per questo ho fatto inserimento dei valori (da tastiera) dentro la funzione. Dentro la funzione la lista viene creata tranquillamente con tutti gli elementi che voglio, ma non ritorna nulla, neanche un elemento, dopo che la funzione inserisci_in_lista termina, io ho una lista vuota, non riesco a capire perchè. è questo il mio problema.
  • Re: Problema con la crezione di una lista in C

    Traccia o non traccia, il codice scritto in quel modo e' sbagliato.
    DEVI avere una serie di funzioni di manipolazione delle liste, che fanno SOLO QUELLO e non contengono codice che con la gestione delle liste NON CENTRA 'NA CIPPA

    Il partizionamento del codice in attivita' coerenti e' la ZERESIMA cosa che un programmatore DEVE imparare, PRIMA della PRIMA che e' scrivere codice che funzioni
  • Re: Problema con la crezione di una lista in C

    migliorabile ha scritto:


    Ma che stai a di?
    Crealista crea la lista vuota ed e' giusto
    Caso mai e' sbagliata inserisciinlista.

    Inoltre 'inserisciinlista' DEVE SOLO inserire un elemento nella lista.
    NON E' SUA RESPONSABILITÀ ricuperare i valori!
    La tua implementazione e' INUTILMENTE INCASINATA perche' contiene del codice che con la gestione della lista NON CENTRA UNA CIPPA!
    Riorganizza il codice!
    si, volevo dire inserisciinlista, mea culpa.
    1) come faccio a recuperare i valori che inserisco tramite inserisciinlista?;
    2) se lei mi dice che l'implementazione è incasinata e che contiene codice che non centra nulla, e poi però non mi dice quale parte del codice non centra o come poter scrivere meglio la parte incasinata, mi lascia con più dubbi che altro.
  • Re: Problema con la crezione di una lista in C

    Ci DEVI RAGIONARE tu! In base alle osservazioni!
    Ho scritto che cosa c'e' di sbagliato e come bisogna modificare!
  • Re: Problema con la crezione di una lista in C

    Rezel97 ha scritto:


    non riesco a capire perchè. è questo il mio problema.
    Volendo seguire la traccia, se inserisci tutto nella funzione passando come argomento la lista, perché la tua funzione restituisce qualcosa? Dovrebbe essere void.

    E poi il tuo compilatore non ti dice nulla su queste righe

    lista = aux;

    ultimo = lista;

    che sono evidentemente sbagliate perché il tipo delle due parti non è compatibile ...
Devi accedere o registrarti per scrivere nel forum
9 risposte