Buongiorno a tutti,
devo svolgere un esercizio su liste concatenate in C, di cui riporto l'inizio:
Sia v un vettore di lunghezza fissata L. Ogni elemento del vettore è un record formato da due campi. Il primo campo contiene una lettera, il secondo un numero reale.
Io l'ho fatto così:
#include <stdio.h>
#include <stdlib.h>
// Lista per rappresentare gli elementi del vettore
typedef struct vettore Vettore;
struct vettore
{
char lettera;
double numero;
Vettore *prox;
};
Vettore *testa = NULL;
// Funzione che aggiunge un elemento in testa alla lista e restituisce la nuova testa della lista
Vettore * aggInTesta (Vettore * testa, char lett, double num)
{
Vettore * nuovaTesta;
// Creo il nuovo elemento della lista
nuovaTesta = (Vettore *) malloc(sizeof(Vettore));
if(nuovaTesta == NULL)
return NULL;
nuovaTesta->lettera = lett;
nuovaTesta->numero = num;
nuovaTesta->prox = NULL;
// Nel caso ci siano altri elementi nella lista...
if(testa != NULL)
{
// ...assegno al campo prox il valore di testa per fare in modo che diventi il primo elemento
nuovaTesta->prox = testa;
}
return nuovaTesta;
}
// Funzione per stampare gli elementi della lista
void stampa_lista (Vettore *testa)
{
while(testa != NULL)
{
printf("%c %lf\n", testa->lettera, testa->numero);
testa = testa->prox;
}
printf("\n");
return;
}
#define L 5
int main()
{
char lett;
double num;
for(int i = 0; i < L; i++)
{
printf("Inserire elemento %d.\n", i);
scanf("%c %lf", &lett, &num);
testa = aggInTesta(testa, lett, num);
if(testa == NULL) exit(EXIT_FAILURE);
}
stampa_lista(testa);
exit(EXIT_SUCCESS);
}
Ma così non funziona, mi fa inserire solo 3 elementi (invece dei 5 che ho stabilito), e mi stampa cinque righe, di cui solo 3 sono giuste. Ho capito che il problema sta nel fatto che il record contiene anche un char, perché ho fatto programmi simili che nel record avevano solo elementi di tipo int o double e li ho svolti come questo e funzionavano.
Non riesco a capire dove sbaglio, grazie in anticipo per chi vorrà aiutarmi!