PDA

Visualizza la versione completa : [C] facile esercizio sulle liste


pippo93
18-05-2013, 19:27
Ciao, l'esercizio è definire una lista di elementi che rappresentano punti sul piano cartesiano, quindi scrivere una funzione che legga due valori float e metta il punto con quelle coordinate in cima alla lista, infine scrivere una funzione che stampi la lista.
Il compilatore non mi dà errori, ma il programma non funziona (il terminale dice "Bus error: 10")
Cosa sbaglio?

Grazie


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

typedef struct EL{
float Ascissa;
float Ordinata;
struct EL *next;} Punto;

void stampa(Punto lista){
Punto current=lista;

while(current.next !=NULL){
printf("(%f,%f) ",current.Ascissa,current.Ordinata);
current=*(current.next);
}
}
void TOP(Punto lista, float A, float O){
Punto *newstart;
newstart=malloc(sizeof(Punto));
(*newstart).Ascissa=A;
(*newstart).Ordinata=O;
*((*newstart).next)=lista;

lista=*newstart;
}

int main(){
float A;
float O;
Punto start;

while(1>0){
scanf("%f",&A);
scanf("%f",&O);
TOP(start,A,O);
stampa(start);
}
return 0;

Marco1995
18-05-2013, 20:01
Non sono molto pratico e non so a cosa si riferisce quell'errore che hai detto però ci provo...per la lista devi prevedere un puntatore a punto e non semplicemente un "punto".Poi gli accessi si possono fare con l'operatore freccia...è fatto apposta no?

oregon
18-05-2013, 20:25
Direi proprio che devi cambiare il codice e usare i puntatori ...



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

typedef struct EL
{
float Ascissa;
float Ordinata;
struct EL *next;
} Punto;

void stampa(Punto *lista)
{
Punto *current=lista;

while(current)
{
printf("(%f,%f) ",current->Ascissa,current->Ordinata);
current=current->next;
}
}

void TOP(Punto **lista, float A, float O)
{
Punto *newstart;
newstart=(Punto *)malloc(sizeof(Punto));
newstart->Ascissa=A;
newstart->Ordinata=O;
newstart->next=*lista;

*lista=newstart;
}

int main()
{
float A, O;
Punto *start=NULL;

while(1>0)
{
scanf("%f",&A);
scanf("%f",&O);
TOP(&start,A,O);
stampa(start);
}

return 0;
}

Loading