Visualizzazione errata numero float

di il
4 risposte

Visualizzazione errata numero float

Ciao, ho un problema con questo codice, ho passato ore a capire dove sbaglio ma non trovo nulla di strano o sbagliato. Praticamente stavo calcolando la media, tramite la funzione void media_positivi, solamente dei valori positivi presenti nella lista, ma quando visualizzo a video la media mi esce il valore cosi:



Il codice è questo:

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

typedef struct nodo {
  int data;
  struct nodo *next;
} nodo;

//prototipi
int lista_leggi_file(FILE *fp, nodo** testa);
void inserisci_in_coda(nodo** testa, int x);
void lista_visualizza(nodo* testa);
void media_positivi(nodo* testa, int* somma, float* media, int n);

int main(int argc, char *argv[]) {

  if(argc!=2){
    printf("\nErrore. Numero di argomenti sbagliato!\n");
    return 1;
  }
  else{
    FILE *fp = fopen(argv[1], "r");
    nodo* lista = NULL;
    if(fp!=NULL){

      int nodi = 0; //nodi letti
      int somma = 0;
      float media = 0;
      int nodi_positivi = 0;
      nodi = lista_leggi_file(fp, &lista);
      printf("\nNumero di nodi creati:\t%d.\n", nodi);
      lista_visualizza(lista);
      printf("\n");
      media_positivi(lista, &somma, &media, nodi_positivi);



      return 0;
    }
  }
}

int lista_leggi_file(FILE *fp, nodo** testa){
  int i = 0;
  while(!feof(fp)){
    int data;
    int nb = fscanf(fp, "%d", &data);
    if(nb>0){
      inserisci_in_coda(testa, data);
      i++;
    }
  }
  return i;
}

void inserisci_in_coda(nodo** testa, int x){
  nodo* newnode = (nodo*)malloc(sizeof(nodo));
  nodo* last = *testa;

  if(newnode!=NULL){
    newnode->data = x;
    newnode->next = NULL;

    if(*testa==NULL){
      *testa = newnode;
      return;
    }

    while(last->next!=NULL){
      last = last->next;
    }
    last->next = newnode;
  }
  else{
    printf("\nErrore nella creazione del nodo.\n");
  }
}

void lista_visualizza(nodo* testa){
  if(testa==NULL){
    printf("NULL");
    return;
  }
  else{
    printf(" %d -> ", testa->data);
    return lista_visualizza(testa->next);
  }
}

void media_positivi(nodo* testa, int* somma, float* media, int n){
  if(testa==NULL){
     *media = (float) *somma / n;
     printf("\nMedia:\t %.2f", *media);
  }
  else{
    if(testa->data>0){
    *somma = *somma + testa->data;
    return media_positivi(testa->next, somma, media, n++);
  }
  else{
    return media_positivi(testa->next, somma, media, n);
    }
  }
}
Qualcuno sa perchè? Grazie

4 Risposte

Devi accedere o registrarti per scrivere nel forum
4 risposte