Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: problema lista [c]

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2014
    Messaggi
    16

    problema lista [c]

    ciao a tutti, sono nuova del forum e anche in tema di programmazione in c..
    stavo implementando questo codice per la lettura di dati da un file,
    ho riscontrato qualche problema..
    Il programma viene compilato senza problemi ma poi nell'esecuzione non mi restituisce alun valore.
    nel mio file ad esempio c'è scritto "z1 5 8.2".
    Non da nessun errore ma è come se uscisse senza motivo (l'if di controllo con l'exit l'ho aggiunto dopo, ma faceva comunque così).
    Inoltre non sono sicura della posizione del main cioè, va inserito prima o dove è adesso?
    grazie in anticipo

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    /*STRUTTURA DEL NODO DELLA LISTA*/
    struct nodo {
        char nome[5];
        double reale,
                     immaginario;
        struct nodo *succ;
    };
    
    char nome[5];
        double reale,
                     immaginario;
    
    
    /*CREAZIONE DELLA LISTA DA FILE*/
    struct nodo *crealista(void){
        struct nodo *nodo, *testa;
        testa = NULL;
        FILE *file = fopen("dist.txt", "r"); /*Apertura del file in modalità Lettura*/
        if(file==NULL) {
            perror("Errore in apertura del file");
            exit(1);
        }
    
    
        while(fscanf(file, "%s %lg %lg", nome, &reale, &immaginario) != EOF){ /*Fino alla fine del file chiamato "file"*/
            nodo = malloc(sizeof(struct nodo)); /*Alloca memoria per il nodo*/
            fscanf(file, "%s %lg %lg", nodo-> nome, &nodo-> reale, &nodo ->immaginario); /*Acquisisce la tripletta di dati*/
            nodo-> succ = testa; /*Il puntatore al nodo successivo punterà alla testa*/
            testa = nodo; /*La testa sarà il nodo appena creato*/
        }
        fclose(file); /*Chiusura del file*/
        return(testa); /*Restituisce il puntatore alla testa della coda*/
    }
    
    int main(void){
        
    
    /*STAMPA DELLA LISTA CREATA*/
    void stampa_lista(struct nodo *nodo){
        while (nodo != NULL){ /*Finchè non arrivo all'ultimo nodo*/
        printf(" %s + %g + %g\n", nodo->nome, nodo->reale, nodo->immaginario); /*Stampo le triple*/
        nodo = nodo->succ; /*Avanzo di nodo*/
        }
    }
    return(0);
    }
    Ultima modifica di LeleFT; 29-12-2014 a 14:29 Motivo: Aggiunti i tag CODE

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Dovresti aggiungere i tag code e/o segnalare a un moderatore perché il codice altrimenti risulta illeggibile.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Attento che richiamando la fscanf() 2 volte nel ciclo while, di fatto leggi due righe di dati dal file ad ogni ciclo, ed i dati della prima lettura vanno persi.
    La funzione stampa_lista() va spostata fuori dal main()
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2014
    Messaggi
    16
    Quote Originariamente inviata da Samuele_70 Visualizza il messaggio
    Attento che richiamando la fscanf() 2 volte nel ciclo while, di fatto leggi due righe di dati dal file ad ogni ciclo, ed i dati della prima lettura vanno persi.
    La funzione stampa_lista() va spostata fuori dal main()
    La funzione stampa lista l'ho messa fuori dal main e ho tolto una delle fscanf dentro il while ma ancora non mi restituisce niente.

  5. #5
    Puoi postare il nuovo codice ?
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2014
    Messaggi
    16
    #include <stdio.h>
    #include <stdlib.h>

    /*STRUTTURA DEL NODO DELLA LISTA*/
    struct nodo {
    char nome[5];
    double reale,
    immaginario;
    struct nodo *succ;
    };

    typedef struct nodo elementolista;
    typedef elementolista *listadielementi;
    void stampa_lista(struct nodo *nodo);

    int main(void){

    char nome[5];
    double reale,
    immaginario;
    FILE *file;


    /*CREAZIONE DELLA LISTA DA FILE*/
    struct nodo *crealista(void){
    struct nodo *nodo, *testa;
    testa = NULL;
    file = fopen("prova.txt", "r"); /*Apertura del file in modalità Lettura*/
    if(file==NULL) {
    printf("Errore in apertura del file");
    exit(1);
    }
    while(fscanf(file, "%s %lg %lg", nome, &reale, &immaginario) != EOF){ /*Fino alla fine del file chiamato "file"*/
    nodo = malloc(sizeof(struct nodo)); /*Alloca memoria per il nodo*/
    nodo-> succ = testa; /*Il puntatore al nodo successivo punterà alla testa*/
    testa = nodo; /*La testa sarà il nodo appena creato*/
    }

    fclose(file); /*Chiusura del file*/
    return(testa); /*Restituisce il puntatore alla testa della coda*/
    }
    return(0);
    }


    /*STAMPA DELLA LISTA CREATA*/
    void stampa_lista(struct nodo *nodo){
    while (nodo != NULL){ /*Finchè non arrivo all'ultimo nodo*/
    printf(" %s + %g + %g\n", nodo->nome, nodo->reale, nodo->immaginario); /*Stampo le triple*/

    nodo = nodo->succ; /*Avanzo di nodo*/
    }
    }

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2014
    Messaggi
    16
    Quote Originariamente inviata da Samuele_70 Visualizza il messaggio
    Puoi postare il nuovo codice ?
    L'altro file l'ho postato sopra ma adesso ne ho fatto uno nuovo che sembra funzionare ma mi legge solo l'ultima riga del file
    Te lo allego

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

    struct EL {
    char identificativo;
    double reale,
    immaginario;
    struct EL *next;
    };

    typedef struct EL elementolista;
    typedef elementolista *numero;
    void stampalista(numero a);

    char identificativo[5];
    double reale,
    immaginario;
    struct EL *next;

    int main(void){
    numero aux, lista = NULL;
    FILE *fp;
    fp = fopen("prova.txt", "r");
    while((fscanf(fp, "%s %lg %lg", identificativo, &reale, &immaginario) != EOF)) {
    aux = malloc(sizeof(elementolista));
    aux->next=lista;

    }
    fclose(fp);
    stampalista(aux);
    return (0);
    }

    void stampalista(numero a){

    while(a!=NULL) {
    printf("%s = %g + i%g\n", identificativo, reale, immaginario);
    a=a->next;
    }
    }

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non potrà mai funzionare se utilizzi delle semplici variabili al posto degli elementi della struttura puntata da aux
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2014
    Messaggi
    16
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Non potrà mai funzionare se utilizzi delle semplici variabili al posto degli elementi della struttura puntata da aux
    Cioè?? Scusa ma è praticamente la prima volta..

  10. #10
    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;
        }
    }
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.