Programmazione C

Pubblicità

anonimo97

Nuovo Utente
Messaggi
1
Reazioni
0
Punteggio
19
Salve a tutti,
sto combattendo da ore sulla correzione di questo programma riguardante l'inserimento e stampa di valori di una lista.
Qualcuno può cortesemente dirmi cosa sbaglio?

ecco il codice
grazie in anticipo.


typedef struct nodo{

int dato;
struct nodo *next;
}node;

typedef node *ptrNode;
void stampaLista(ptrNode testa);
ptrNode inserimentoTesta(ptrNode testa);

int main() {

ptrNode testaMain=NULL;
int scelta;

do{

printf("Scegli una voce del menu:\n");
printf("1)inserimento in testa\n");
printf("2)stampa lista\n");
printf("3)EXIT\n");
scanf("%d", &scelta);

switch(scelta){

case 1:
testaMain=inserimentoTesta(testaMain);
break;

case 2:
stampaLista(testaMain);
break;

}

}while(scelta!=3);


return 0;
}

void stampaLista(ptrNode testa){


if(testa==NULL){

printf("NULL\n");
}

else{

printf("%d", testa->dato);
stampaLista(testa->next);
}

}

ptrNode inserimentoTesta(ptrNode testa){

int n;
int i;
ptrNode nuovo;

printf("Digita il numero degli elementi che vuoi inserire in lista:");
scanf("%d",&n);

if(n==0){

testa=NULL;
printf("La lista e'vuota");

}

else{

//creazione del primo elemento
int num;


nuovo=(ptrNode)malloc(sizeof(node));
printf("Inserire il primo valore:\n");
scanf("%d",&num);
nuovo->dato=num;
nuovo->next=testa;
nuovo=testa;

for(i=2;i<=n;i++){

nuovo->next=(ptrNode)malloc(sizeof(node));
nuovo=nuovo->next;

printf("\nInserisci il %d elemento: ", i);
scanf("%d", &nuovo->dato);

}
nuovo->next=NULL;
}

return nuovo;
}
 
Prima di tutto:
Primo sbaglio: dai un nome piu' sensato alla discussione, spiegando il tipo di problema
Secondo sbaglio: quando pubblichi codice mettilo dentro il tag CODE, cosi' come e' e' illeggibile

Lo sbaglio NEL codice e' nel metodo di inserimento, ilprimo sbaglio che vedo e' l'istruzione

Codice:
nuovo=testa;

che deve invece essere l'opposto. Il nuovo nodo e' la nuova testa.

Usa il debugger, e accertati dopo ogni inserimenti che il valore del nuovo nodo sia corretto. Aggiungi un nodo solo e guarda dove sbagli. Poi aggiungene un altro. Poi aggiungene due. Ci sono probailmente piu' errori di quello che ho notato io (non ho guardato il resto del codice)
 
Ci sono altri errori se non sbaglio, tipo pensare che l'indice di partenza di un vettore è 1 e non 0. Se ti può aiutare ecco il codice in C++
C++:
#include <iostream>
using namespace std;

struct node
{
    double value;
    node* next;
};
typedef node* list;

void inizializzaLista(list*);
void stampaLista(list*);

int main()
{
    list lista = nullptr;
    int scelta;
    do
    {
        cout << "Scegli una voce del menu" << endl
            << "1: Inserimento da tastiera" << endl
            << "2: Stampa lista" << endl
            << "3: Esci" << endl;

        cin >> scelta;

        switch (scelta)
        {
        case 1:
            inizializzaLista(&lista);
            break;
        case 2:
            stampaLista(&lista);
            break;
        default:
            break;
        }

    } while (scelta != 3);
}

void inizializzaLista(list* listPtr)
{
    size_t size;
    cout << "Quanti elementi possiede la lista?: ";
    cin >> size;

    *listPtr = new node[size];

    for (int i = 0; i < size - 1; i++)
        (*listPtr)[i].next = &(*listPtr)[i + 1];
    (*listPtr)[size - 1].next = nullptr;

    for (int i = 0; i < size; i++)
    {
        cout << "Inserisci il valore: ";
        cin >> (*listPtr)[i].value;
    }
}

void stampaLista(list* listPtr)
{
    for (list ptr = *listPtr; ptr != nullptr; ptr = ptr->next)
    {
        cout << ptr->value << " ";
    }
    cout << endl;
}
 
Pubblicità
Pubblicità
Indietro
Top