Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [C] Selezionare e leggere una determinata riga di un file di testo

    Buonasera, vorrei rivolgervi un piccolo quesito. Io ho questo file:
    Auto1 75
    Auto2 100
    Auto3 80
    Auto4 65
    Auto5 85
    Il mio problema è leggere la prima riga ed inserire il nome e la velocità all'interno di due variabili, per poi fare lo stesso con tutti gli altri elementi. Ciò che non so come fare è il far capire al mio programma come leggere solo la prima riga al primo passaggio e successivamente, al secondo passaggio, come partire dalla seconda riga fino alla fine del file. Spero voi mi possiate dare una mano.
    Grazie in anticipo e buona giornata.

  2. #2
    Non devi fare niente. Ad ogni operazione di I/O su file viene spostato il cursore sul file. Se leggi la prima riga, il cursore viene posizionato alla fine di questa. La successiva lettura leggerà la seconda riga. E così via.

    Questo sempre che tu non chiuda il file.

  3. #3
    Il codice che ho scritto è il seguente:


    codice:
    #include <stdio.h>#include <malloc.h>
    
    
    typedef struct elemento{
        char nome[20];
        int v_media;
        struct elemento *next;
    }elemento;
    
    
    struct elemento *crea_lista()
    {
       elemento *p, *punt;
       int i;//indice del ciclo
       int n = 12;//numero elementi che si intende inserire
       p=NULL;
       p = (struct elemento *)malloc(sizeof(struct elemento));
       FILE *catalogo= fopen("elenco_auto.txt","r");
       fscanf(catalogo, "%s", p->nome);
       fscanf(catalogo, "%i", &p->v_media);
       /*scanf("%s", p->nome);
       scanf("%i", & p->v_media);*/
       punt = p;
       for(i=3; i<=n; i++)
       {
           punt->next = (struct elemento *)malloc(sizeof(struct elemento));
           punt = punt->next;
           fscanf(catalogo, "%s", punt->nome);
           fscanf(catalogo, "%i", &punt->v_media);
           /*scanf("%s", punt->nome);
           scanf("%i", &punt->v_media);*/
       } // chiudo il for
       punt->next = NULL; // marcatore fine lista
       fclose(catalogo);
       return(p);
    }
    
    int main()
    {
       struct elemento *lista; // puntatore della lista
       lista = crea_lista(); // crea la lista
       visualizza_lista(lista); // stampa la lista
       return 0;
    }

    Visualizza lista semplicemente mi scrive cosa contiene la lista che ho creato. Ma l'output che ricevo è il seguente:
    lista —> (i792094066 —> (i1868852841 —> (i1766203502 —> (i1852397404 —> (i1953724755 —> (i2003783795 —> (i1852789596 —> (i1176530273 —> (i1936876915 —> (i1131308400 —> (i1096577906 —> NULL
    Invece dovrebbe essere lista -> nome1 -> 65 -> nome2 -> 75... ecc.
    Sapresti dirmi cosa sbaglio?
    Ultima modifica di LeleFT; 08-08-2014 a 12:43 Motivo: Modificati tag QUOTE con tag CODE

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Ma il codice della visualizza_lista qual è ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Scusa l'avevo dimenticato.


    codice:
    void visualizza_lista(struct elemento *p){
       printf("lista —> ");
    
    
       /* ciclo di scansione */
       while(p != NULL)
       {
          printf("%s", p->nome); // visualizza l’informazione
          printf("%i", p->v_media); // visualizza l’informazione
          printf(" —> ");
          p = p->next; // scorre di un elemento
       }
       printf("NULL");
    }
    Ultima modifica di LeleFT; 08-08-2014 a 12:43 Motivo: Modificati tag QUOTE con tag CODE

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Al posto di %i usa %d (almeno per il numero l'errore è quello ...)


    P.S. Usa i tag CODE per il codice non QUOTE
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Ho provato con %d ma mi da sempre lo stesso output. Non capisco davvero dove ho sbagliato.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Utilizza %d anche nella fscanf
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    codice:
    #include <stdio.h>#include <malloc.h>
    
    
    typedef struct elemento{
        char nome[20];
        int v_media;
        struct elemento *next;
    }elemento;
    
    
    struct elemento *crea_lista()
    {
       elemento *p, *punt;
       int i;//indice del ciclo
       int n = 12;//numero elementi che si intende inserire
       p=NULL;
       p = (struct elemento *)malloc(sizeof(struct elemento));
       FILE *catalogo= fopen("elenco_auto.txt","r");
       fscanf(catalogo, "%s", p->nome);
       fscanf(catalogo, "%d", &p->v_media);
       punt = p;
       for(i=3; i<=n; i++)
       {
           punt->next = (struct elemento *)malloc(sizeof(struct elemento));
           punt = punt->next;
           fscanf(catalogo, "%s", punt->nome);
           fscanf(catalogo, "%d", &punt->v_media);
       } // chiudo il for
       punt->next = NULL; // marcatore fine lista
       fclose(catalogo);
       return(p);
    }
    
    
    void visualizza_lista(struct elemento *p)
    {
       printf("lista —> ");
    
    
       /* ciclo di scansione */
       while(p != NULL)
       {
          printf("%s", p->nome); // visualizza l’informazione
          printf("%d", p->v_media); // visualizza l’informazione
          printf(" —> ");
          p = p->next; // scorre di un elemento
       }
       printf("NULL");
    }
    
    
    int main()
    {
       struct elemento *lista; // puntatore della lista
       lista = crea_lista(); // crea la lista
       visualizza_lista(lista); // stampa la lista
       return 0;
    }

    Ho provato anche con %d ma non cambia nulla
    Ultima modifica di LeleFT; 08-08-2014 a 12:44 Motivo: Modificati tag QUOTE con tag CODE

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    @Alessio Mariani
    te l'ha già detto oregon e te lo ripeto anch'io: quando posti del codice devi usare i tag CODE non i tag QUOTE (che servono per fare citazioni) come hai fatto finora.

    Ho sistemato io tutti i tuoi post.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.