Ciao a tutti ho implementato questo programma in C: ritorna la media di una lista di puntatori. Funziona ma, si arresta dopo l'inserimento di un solo valore. Non riesco a capire cos'è che sbaglio. Grazie e tutti
/*
Data una lista di valori interi in forma collegata con
puntatori, scrivere una funzione che :
• a.Calcoli la media dei valori.
*/
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
typedef unsigned short int Boolean; //definizioni per l'uso di booleani
#define TRUE 1
#define FALSE 0
struct list {
int value;
struct list * next_ptr;
};
void init(struct list ** ptrptr);
void pre_insert(struct list ** ptrptr, int value);//uso inserimento in testa
float meanList(struct list * ptr);
void getvalue(float *value_ptr);
void notify_selection_failure(char selection);
main()
{
struct list *lista;
int size, value;
size = 5;
char selection[10];
Boolean exit_required = FALSE;
int inserimento = 0;
int numeroElem = 0;
float sum = 0;
init(&lista);
printf("Digita uno dei seguenti caratteri:\n");
printf("-A per avere la media degli alementi nella lista\n");
printf("-a per fare un inserimento in testa\n");
printf("-x per uscire dal programma\n");
do
{
printf("\nChe operazione vuoi fare? ");
scanf("%s", selection);
switch (selection[0])
{
case 'A'://Calcolo del valore medio degli elementi nella lista
sum = meanList(lista);
printf("Ecco la media: %f", sum);
break;
case 'a':
getvalue(&value); //inserimento in testa
pre_insert(&lista, value);
break;
case 'x':
exit_required = TRUE;
break;
default:
notify_selection_failure(selection[0]);
}
}
while (exit_required == FALSE);
}
//lista collegata con puntatori
void init(struct list **ptrptr)
{
*ptrptr = NULL;
}
//inserimento in testa
void pre_insert(struct list ** ptrptr, int value) {
while (*ptrptr != NULL) {
ptrptr = &((*ptrptr)->next_ptr);
}
pre_insert(ptrptr, value);
}
float meanList(struct list * ptr) {
float sum = 0;
int numElem = 0;
while (ptr != NULL)
{
sum += ptr->value;
numElem++;
ptr = ptr->next_ptr;
}
return sum / numElem;
}
void getvalue(int *value_ptr)
{
//acquisisce un float da tastiera (passaggio per puntatore)
printf("Inserisci un valore: ");
scanf("%d", value_ptr);
}
void notify_selection_failure(char selection)
{
//notifica il fallimento della selezione
printf("\n%c Selezione non legale!!", selection);
}