Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 14 su 14

Discussione: problema lista [c]

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2014
    Messaggi
    16
    Quote Originariamente inviata da Samuele_70 Visualizza il messaggio
    Gli ho dato una sistemata
    codice:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    typedef struct _ElementoLista
    {
        char   identificativo[10];
        double reale;
        double immaginario;
        struct _ElementoLista *next;
    } elementoLista, *pElemento;
    
    void stampalista(pElemento a);
    
    int main(void)
    {
        char  identificativo[10] = "";
        double reale = 0.0;
        double immaginario = 0.0;
        
        pElemento lista = NULL, nuovoElemento = NULL;
        FILE *fp;
        fp = fopen("prova.txt", "r");
        if( ! fp )
        {
            printf("Errore apertura file !\n");
            exit( -1 );
        }
        puts("Lettura da file :\n");
        while( fscanf(fp, "%s %lg %lg", identificativo, &reale, &immaginario) != EOF )
        {
            printf("%s = %g + %g\n", identificativo, reale, immaginario);
            nuovoElemento = (elementoLista*)malloc(sizeof(elementoLista));
            strcpy( nuovoElemento->identificativo, identificativo );
            nuovoElemento->reale = reale;
            nuovoElemento->immaginario = immaginario;
            nuovoElemento->next = lista;
            lista = nuovoElemento;
        }
        fclose(fp);
        stampalista(lista);
        
        puts("\n\nterminato");
        getchar();
        return (0);
    }
    
    void stampalista(pElemento a)
    {
        puts("\nContenuto lista :\n");
        while( a!=NULL )
        {
            printf("%s = %g + i%g\n", a->identificativo, a->reale, a->immaginario);
            a=a->next;
        }
    }
    Grazie mille l'unica cosa che ancora non mi torna è che quando stampa la lista in forma di espressione i dati all'interno del file li mette al contrario, cioè dall'ultima riga alla prima e se inserisco nel file caratteri sbagliati (es: a a a) al posto di char double double continua a stamparmi "a"= "valore reale della riga precendente"+"valore immaginario della riga precedente"..
    Ultima modifica di fedi04; 28-12-2014 a 17:45

  2. #2
    Se ci rifletti è normale che succeda questo dato che ogni nuovo nodo diventa la testa della lista stessa.
    Se vuoi mantenere l'ordine corretto devi aggiungere in coda ogni nuovo nodo che crei.

    Per quanto riguarda l'eventualità dei dati non corretti si può semplicemente ignorare le righe non conformi
    codice:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    typedef struct _ElementoLista
    {
        char   identificativo[10];
        double reale;
        double immaginario;
        struct _ElementoLista *next;
    } elementoLista, *pElemento;
    
    void stampalista(pElemento a);
    
    int main(void)
    {
        int result;
        char  identificativo[10] = "";
        double reale = 0.0;
        double immaginario = 0.0;
        
        pElemento lista = NULL, nuovoElemento = NULL;
        FILE *fp;
        fp = fopen("lista_problema_lista.txt", "r");
        // fp = fopen("prova.txt", "r");
        if( ! fp )
        {
            printf("Errore apertura file !\n");
            exit( -1 );
        }
        puts("Lettura da file :\n");
        while( (result = fscanf(fp, "%s %lg %lg", identificativo, &reale, &immaginario)) != EOF )
        {
            if( result == 3 )
            {
                printf("%s = %g + %g\n", identificativo, reale, immaginario);
                nuovoElemento = (elementoLista*)malloc(sizeof(elementoLista));
                strcpy( nuovoElemento->identificativo, identificativo );
                nuovoElemento->reale = reale;
                nuovoElemento->immaginario = immaginario;
                nuovoElemento->next = lista;
                lista = nuovoElemento;
            }
        }
        fclose(fp);
        stampalista(lista);
        
        puts("\n\nterminato");
        getchar();
        return (0);
    }
    
    void stampalista(pElemento a)
    {
        puts("\nContenuto lista :\n");
        while( a!=NULL )
        {
            printf("%s = %g + i%g\n", a->identificativo, a->reale, a->immaginario);
            a=a->next;
        }
    }
    Ultima modifica di Samuele_70; 28-12-2014 a 19:37
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2014
    Messaggi
    16
    Quote Originariamente inviata da Samuele_70 Visualizza il messaggio
    Se ci rifletti è normale che succeda questo dato che ogni nuovo nodo diventa la testa della lista stessa.
    Se vuoi mantenere l'ordine corretto devi aggiungere in coda ogni nuovo nodo che crei.

    Per quanto riguarda l'eventualità dei dati non corretti si può semplicemente ignorare le righe non conformi
    codice:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    typedef struct _ElementoLista
    {
        char   identificativo[10];
        double reale;
        double immaginario;
        struct _ElementoLista *next;
    } elementoLista, *pElemento;
    
    void stampalista(pElemento a);
    
    int main(void)
    {
        int result;
        char  identificativo[10] = "";
        double reale = 0.0;
        double immaginario = 0.0;
        
        pElemento lista = NULL, nuovoElemento = NULL;
        FILE *fp;
        fp = fopen("lista_problema_lista.txt", "r");
        // fp = fopen("prova.txt", "r");
        if( ! fp )
        {
            printf("Errore apertura file !\n");
            exit( -1 );
        }
        puts("Lettura da file :\n");
        while( (result = fscanf(fp, "%s %lg %lg", identificativo, &reale, &immaginario)) != EOF )
        {
            if( result == 3 )
            {
                printf("%s = %g + %g\n", identificativo, reale, immaginario);
                nuovoElemento = (elementoLista*)malloc(sizeof(elementoLista));
                strcpy( nuovoElemento->identificativo, identificativo );
                nuovoElemento->reale = reale;
                nuovoElemento->immaginario = immaginario;
                nuovoElemento->next = lista;
                lista = nuovoElemento;
            }
        }
        fclose(fp);
        stampalista(lista);
        
        puts("\n\nterminato");
        getchar();
        return (0);
    }
    
    void stampalista(pElemento a)
    {
        puts("\nContenuto lista :\n");
        while( a!=NULL )
        {
            printf("%s = %g + i%g\n", a->identificativo, a->reale, a->immaginario);
            a=a->next;
        }
    }
    grazie 1000

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2014
    Messaggi
    16
    Quote Originariamente inviata da Samuele_70 Visualizza il messaggio
    Se ci rifletti è normale che succeda questo dato che ogni nuovo nodo diventa la testa della lista stessa.
    Se vuoi mantenere l'ordine corretto devi aggiungere in coda ogni nuovo nodo che crei.

    Per quanto riguarda l'eventualità dei dati non corretti si può semplicemente ignorare le righe non conformi
    codice:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    typedef struct _ElementoLista
    {
        char   identificativo[10];
        double reale;
        double immaginario;
        struct _ElementoLista *next;
    } elementoLista, *pElemento;
    
    void stampalista(pElemento a);
    
    int main(void)
    {
        int result;
        char  identificativo[10] = "";
        double reale = 0.0;
        double immaginario = 0.0;
        
        pElemento lista = NULL, nuovoElemento = NULL;
        FILE *fp;
        fp = fopen("lista_problema_lista.txt", "r");
        // fp = fopen("prova.txt", "r");
        if( ! fp )
        {
            printf("Errore apertura file !\n");
            exit( -1 );
        }
        puts("Lettura da file :\n");
        while( (result = fscanf(fp, "%s %lg %lg", identificativo, &reale, &immaginario)) != EOF )
        {
            if( result == 3 )
            {
                printf("%s = %g + %g\n", identificativo, reale, immaginario);
                nuovoElemento = (elementoLista*)malloc(sizeof(elementoLista));
                strcpy( nuovoElemento->identificativo, identificativo );
                nuovoElemento->reale = reale;
                nuovoElemento->immaginario = immaginario;
                nuovoElemento->next = lista;
                lista = nuovoElemento;
            }
        }
        fclose(fp);
        stampalista(lista);
        
        puts("\n\nterminato");
        getchar();
        return (0);
    }
    
    void stampalista(pElemento a)
    {
        puts("\nContenuto lista :\n");
        while( a!=NULL )
        {
            printf("%s = %g + i%g\n", a->identificativo, a->reale, a->immaginario);
            a=a->next;
        }
    }
    Ciao, ho postato un'altra discussione per un nuovo problema sempre riguardante questo codice..
    Errore in compilazione del file [C]

    non è che mi potresti aiutare?
    Scusa il disturbo.. Grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.