Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di dodora
    Registrato dal
    Oct 2012
    Messaggi
    11

    [C] operazioni su liste

    Dovrei scrivere un programma in C che legga da file dei record contenenti nome, cognome, età, altezza e li memorizzi in una lista.
    in pratica ho il file contenente un elenco del tipo:

    maria carso 26 168
    luigi rossi 34 173
    daniela mulino 22 170

    Fino al caricamento dal file non ho nessun problema, il problema nasce dal caricamento nella lista ed il problema credo sia nella gestione delle stringhe per il nome ed il cognome.
    Ecco il codice:

    codice:
     
    #include <stdio.h>
    #include <stdlib.h>
    
    #include <malloc.h>
    
    
    //definizione struttura record
    typedef struct
        { char nome[20];
          char cognome[20];
          int eta;
          int altezza;
        } record;
    
    //definizione lista    
    typedef struct EL
    	{record info;
    	 struct EL *prox;
    	}elemlista;
    	
    typedef elemlista *listaelementi;
    
    //procedura di stampa lista
    void visualizzalista(listaelementi lista)
    { if (lista==NULL)
      	 printf("fine!!");
      else {  printf("%s %s %d %d \n", lista->info.nome, lista->info.cognome, lista->info.eta, lista->info.altezza);
      	   	  visualizzalista(lista->prox);
           }
    }
    
    
    int main(int argc, char *argv[])
    {
      listaelementi lista;
      elemlista *punt;
      lista=NULL;
      FILE *fl;
      record elemento;
      
       /*memorizza elenco dal file alla lista*/
      if ((fl=fopen("elenco.txt", "r")) == NULL)
      	  printf("impossibile aprire il file");
      else 
      {   
       	 while(!feof(fl))
       	 { fscanf(fl, "%s %s %d %d", &elemento.nome, &elemento.cognome, &elemento.eta, &elemento.altezza);
       	 
       	 /*solo per controllare che i dati vengano presi in modo corretto*/
      	  printf("%s %s %d %d \n", elemento.nome, elemento.cognome, elemento.eta, elemento.altezza);
      	   
    	   //caricamento dati nella lista	
      	   punt = malloc(sizeof(elemlista));
     	   *punt->info.nome= *elemento.nome;
    	   *punt->info.cognome= *elemento.cognome;
      	   punt->info.eta= elemento.eta;
    	   punt->info.altezza= elemento.altezza;
           punt->prox = lista;
           lista=punt;
          }
      }     
    //stampa lista
    visualizzalista(lista);
    	 
    		  
    
    
     
    
    
      
      system("PAUSE");	
      return 0;
    }
    in particolare credo che la chiave sia in queste istruzioni(piuttosto anomale come le ho scritte ma solo così non mi da errori sull'assegnazione)

    codice:
    *punt->info.nome= *elemento.nome;
     *punt->info.cognome= *elemento.cognome;
    Devo forse gestire le stringhe come array?e se il problema è nella definizione..perchè l'istruzione
    codice:
    /*solo per controllare che i dati vengano presi in modo corretto*/ 
    printf("%s %s %d %d \n", elemento.nome, elemento.cognome, elemento.eta, elemento.altezza);
    stampa correttamente??

    PER FAVORE AIUTATEMI!!!

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    Ciao

    Ciao , ho dato un occhiata ai tuoi precedenti post , e vedo che sei ossessionato dalle liste

    Per assegnare una stringa ad un altra stringa , in c si usa strncpy() , e non = , e se uno fa esercizi sulle liste , forse questo lo dovrebbe già sapere


    *punt->info.nome= *elemento.nome; //NON HO IDEA di cosa faccia e perchè non dia errore


    prova

    strncpy(punt->info.nome,elemento.nome);
    Tecnologia

  3. #3
    Utente di HTML.it L'avatar di dodora
    Registrato dal
    Oct 2012
    Messaggi
    11
    Prima di tutto grazie per avermi risposto...

    Infatti le liste sono il mio incubo...e il tuo "rimprovero" è sensato...solo che le sto studiando da sola e non le trovo molto semplici...questo punto della gestione delle stringhe nelle liste mi mancava, ci provo subito!!

    L'altra cosa che mi resta sono le liste di liste quindi probabilmente ci sarà ancora un mio post

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