PDA

Visualizza la versione completa : [C] Lista di liste (problema implementazione)


UltraBeginner
21-11-2006, 15:49
Ciao a tutti,

sono infine arrivato all ultimo argomento (nonche il piu carognoso...): le liste...
Dopo essermi sorbito la teoria dal libro, sto provando ad implementare una lista di liste... e qui vengono i problemi:

Codice


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

// Programma per gestire la lista di liste
// Gestione di un database di macchine
// Chiede di inserire il tipo di macchina e poi tutti gli accessori

// Strutture dati

typedef struct accessori //struttura accessori
{
char accessorio[20];
struct accessori *next;
} Acc,*PointAcc;

typedef struct automobile //struttura accessori
{
char macchina[20];
PointAcc pointer;
struct automobile *next;
} Auto,*PointAuto;

int main()
{
char temp[20];
PointAuto HeadAuto,CurrPtr,PrevPtr; // puntatori a struct automobile
PointAcc HeadAcc,CurrentPtr,PreviousPtr=NULL; // puntatori a struct accessori
HeadAuto=(PointAuto)malloc(sizeof(PointAuto)); // crea il primo elemento della lista;

CurrPtr=HeadAuto;

printf("Inserire l'automobile, F per finire:");
scanf("%s",temp);

while(strcmp(temp,"F")!=0) // ciclo per le auto
{
strcpy(CurrPtr->macchina,temp); // copia il nome dell auto nel campo macchina della struttura automobile

printf("Inserire gli accessori, E per finire:"); // immisione degli accessori;
scanf("%s",temp);

HeadAcc=(PointAcc)malloc(sizeof(PointAcc)); // creazione primo elemento lista accessori
PreviousPtr=CurrentPtr=HeadAcc;

CurrPtr->pointer=HeadAcc; // metto il valore del puntatore a accessori nell elemento della lista automobile

while(strcmp(temp,"E")!=0) // ciclo per gli accessori

{
strcpy(CurrentPtr->accessorio,temp); //copio l accesserio nel suo campo

PreviousPtr=CurrentPtr;
CurrentPtr=(PointAcc)malloc(sizeof(PointAcc)); //crezione di un nuovo elemento per accessorio
PreviousPtr->next=CurrentPtr;

printf("Inserire gli accessori, E per finire:"); // immisione degli accessori;
scanf("%s",temp);
}

PreviousPtr->next=NULL; // metto a NULL l elemento creato prima di immettere il carattere E

PrevPtr=CurrPtr;
CurrPtr=(PointAuto)malloc(sizeof(PointAuto)); //Crezione del nuovo elemento della lista macchine
PrevPtr->next=CurrPtr; // creo il link al prossimo elemento della lista
printf("Inserire l'automobile, F per finire:");
scanf("%s",temp);

}

PrevPtr->next=NULL;
CurrPtr=HeadAuto;

while(CurrPtr->next!=NULL)
{
printf("%s\n",CurrPtr->macchina);
printf(" |\n");
printf(" V\n");

CurrPtr=CurrPtr->next;
}
printf("%s\n",CurrPtr->macchina);
free(HeadAuto);
system("pause");

}

allora (uso DevC++):
1) la compilazione non da errori (CRTL+F9)
2) quando lo faccio girare (F9) succede questo: immetto il nome di una macchina (es Alfa) poi mi chede l accessorio (metto E per uscire subito), dopo di che non mi chiede il nome di una nuova macchina bensi esce dal programma ignorando il system"pause".....
3) se invece lo faccio girare con il tasto F8 (debug) prende le macchine e gli accessori, e alla fine fa pure il ciclo di stampa....ma finito questo rimane li bloccato e continua a ignorare il system("pause")....any idea? :confused: :confused: :confused: :confused: :confused: :confused:

4) cosa ancora piu strana: se lo faccio girare immettendo anche qualche accessorio il programma funziona perfettamente -.- Help please! :dh˛:

LeleFT
21-11-2006, 15:51
Evitiamo le esclamazioni inutili nei titoli. Non servono a capire quale sia il problema.


Ciao. :ciauz:

UltraBeginner
21-11-2006, 15:54
Originariamente inviato da LeleFT
Evitiamo le esclamazioni inutili nei titoli. Non servono a capire quale sia il problema.


Ciao. :ciauz:

Corretto :zizi: :zizi: :ciauz:

Loading