Programma inserimento valori in lista, pari e dispari

di il
5 risposte

Programma inserimento valori in lista, pari e dispari

Buongiorno a tutti! è la prima volta che scrivo in questo sito, ho letto il regolamento e spero vivamente di non aver sbagliato a formattare il codice, se così fosse chiedo perdono.
Venendo all'oggetto della discussione, ho scritto questo programma che , ricevendo dei dati dall'esterno, li immettesse in una lista. Inoltre , il programma include una funzione "visualizzaEcontrolla" che stampa i valori della lista e dovrebbe contare quanti sono i pari e i dispari. Ebbene, funziona tutto perfettamente tranne il discorso dei pari e dispari, quando vado a compilare entrambi i tipi di numeri mi si considerano pari a 0. Probabilmente avrò fatto un errore stupidissimo, se me lo faceste notare voi programmatori esperti ve ne sarei grato ;
Grazie in anticipo, posto qui il codice, la funzione che ho menzionato si trova proprio alla fine:
#include <stdio.h>
#include <malloc.h>
typedef struct lista {
        int valore;
        struct lista *pun; 
        }list;
        
list * creaLista();
void visualizzaEcontrolla(list *);

main () {
     list * puntLista;
     puntLista = creaLista();
     
     visualizzaEcontrolla(puntLista);
     
     
     }
list * creaLista() {
    int i, n;
    if (n==0) printf ("\nMa allora sei stronzo!");
    
    else {
         
         p=(list *)malloc(sizeof(list));
         printf("\nInserisci il 1o valore: ");
         scanf("%d", &p->valore);
         aux=p;
         
         
    for (i=2; i<=n; i++) {
        aux->pun = (list*)malloc(sizeof(list));
        aux = aux->pun;
    list *p, *aux;
    printf(" Quanti valori vuoi inserire ?   ");
    scanf ("%d", &n);
    
        printf("\nInserisci il %do valore: ", i);
        scanf("%d", &aux->valore);
        
        }
        aux->pun = NULL;
        }
        return (p);
        }
        
void visualizzaEcontrolla(list *p)
{    
     int pari, dispari, resto;
     printf("\nI valori della lista sono: ");
     while (p != NULL) {
           printf("%d", p->valore);
           printf(" ---> ");
           p = p->pun;
           }
           printf("NULL\n\n");
       pari = 0;
       dispari = 0;
      while (p != NULL) {
            resto = ((p->valore) % 2);
            if ( resto == 0 ) 
                pari = pari + 1;
      else dispari = dispari + 1;
       p = p->pun;
       }
     printf (" I valori pari sono %d ", pari);
     printf ("\nI valori dispari sono %d", dispari);
     }
     
     
           

        
    
    

5 Risposte

  • Re: Programma inserimento valori in lista, pari e dispari

    Metti una printf() all'interno dell'ultimo ciclo
          while (p != NULL) {
                resto = ((p->valore) % 2);
                printf( "%d\n", resto );
                if ( resto == 0 )
                    pari = pari + 1;
          else dispari = dispari + 1;
           p = p->pun;
           }
    Molto probabilmente non verrà mai stampato...
  • Re: Programma inserimento valori in lista, pari e dispari

    candaluar ha scritto:


    Metti una printf() all'interno dell'ultimo ciclo
          while (p != NULL) {
                resto = ((p->valore) % 2);
                printf( "%d\n", resto );
                if ( resto == 0 )
                    pari = pari + 1;
          else dispari = dispari + 1;
           p = p->pun;
           }
    Molto probabilmente non verrà mai stampato...

    Scusa, una printf() in che punto precisamente? Perchè non verrà mai stampato?
  • Re: Programma inserimento valori in lista, pari e dispari

    una printf() in che punto precisamente?
    dopo aver calcolato "resto", come ti ho già mostrato nell'estratto di codice che ti avevo postato.
    Perchè non verrà mai stampato?
    Non verrà mai stampato perchè il ciclo non verrà mai eseguito, neanche una volta; il test infatti richiede che p sia diverso da NULL e a quel punto, dopo il precedente ciclo che attraversava tutta la struttura dati, p dovrebbe valere proprio NULL.
  • Re: Programma inserimento valori in lista, pari e dispari

    candaluar ha scritto:


    una printf() in che punto precisamente?
    dopo aver calcolato "resto", come ti ho già mostrato nell'estratto di codice che ti avevo postato.
    Perchè non verrà mai stampato?
    Non verrà mai stampato perchè il ciclo non verrà mai eseguito, neanche una volta; il test infatti richiede che p sia diverso da NULL e a quel punto, dopo il precedente ciclo che attraversava tutta la struttura dati, p dovrebbe valere proprio NULL.
    Ah scusa, avevo guardato di svista il codice che avevi tratto dal mio pensando che citando avessi ricopiato tutto, e non ho visto che avevi invece messo solo il pezzo del printf() ..perdonami
    Comunque ci ho provato, ma non funziona ugualmente : (
  • Re: Programma inserimento valori in lista, pari e dispari

    Comunque ci ho provato, ma non funziona ugualmente : (
    La mia non era la soluzione ma la spiegazione di perchè non funziona: per farlo funzionare devi modificarlo.
Devi accedere o registrarti per scrivere nel forum
5 risposte