Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C] caricamento elenco da file

    salve ragazzi,
    avrei una cosa da chiedervi:
    devo fare un programma che mi carichi un elenco di auto da file con la seguente sintassi:
    !marca!modello!prezzo!

    ho creato la seguente funzione:

    int carica(FILE *f,automobile el[])

    {
    int i,k;

    for(i=0;!feof(f);i++){


    for(k=0;(el[i].marca[k]=fgetc(f))!='!';k++);
    el[i].marca[k]='\0';
    for(k=0;((el[i].modello[k]=fgetc(f))!='!')&&!feof(f);k++);
    el[i].modello[k]='\0';
    fscanf(f,"%f \n ",&(el[i].prezzo));
    }

    return i;

    }


    vorrei chiedervi come devo fare per far caricare anche il primo punto esclamativo !...?

    riesco solo a caricare marca,modello e prezzo,ma a causa del mancato caricamento del primo punto esclamativo a video l'elenco mi compare molto male..

    ringrazio anticipatamente per le vostre risposte...

  2. #2
    Non so se ho capito ma se fai
    codice:
    for(k=0;(el[i].marca[k]=fgetc(f))!='!';k++)
    non ti perdi la marca? Se ogni riga comincia con ! il ciclo for termina subito ed in effetti non legge la marca. Prova questo codice e vedi se è questo il problema:
    codice:
    int carica(FILE *f,automobile el[])
    {
      int i,k;
    
      for(i=0;!feof(f);i++){
        
        while( (fgetc(f) != '!') && !feof(f) )
          ; // Scoda tutti i caratteri fino al primo !
        
        for(k=0;(el[i].marca[k]=fgetc(f))!='!';k++);
        el[i].marca[k]='\0';
        for(k=0;((el[i].modello[k]=fgetc(f))!='!')&&!feof(f);k++);
        el[i].modello[k]='\0';
        fscanf(f,"%f \n ",&(el[i].prezzo));
      }
      return i;
    }
    Buon lavoro

  3. #3
    mi carica sempre tutto male pure se faccio come dici tu...

    chi altro saprebbe darmi un aiuto..per piacere

  4. #4
    scusa ma non è che puoi postare quello che ti viene a video? sinceramente non ha capito cosa vuoi dire con "mi carica sempre tutto male"...si perde dei campi o ci sono caratteri spuri nei campi ? Siccome mi sono accorto che mi mancava un ungetc prova con questo:
    codice:
    int carica(FILE *f,automobile el[])
    {
      int i,k;
      char tmp_c;
    
      for(i=0;!feof(f);i++){
        do
        {
           tmp_c = fgetc(f);
           if( feof(f) )
             return i;
        }
        while( (tmp_c == '!') || (tmp_c == '\r') || (tmp_c == '\n') );
        
        ungetc(tmp_c, f);
        for(k=0;(el[i].marca[k]=fgetc(f))!='!';k++);
        el[i].marca[k]='\0';
        for(k=0;((el[i].modello[k]=fgetc(f))!='!')&&!feof(f);k++);
        el[i].modello[k]='\0';
        fscanf(f,"%f!",&(el[i].prezzo));
      }
      return i;
    }

  5. #5
    allora vi posto prima il codice della mia funzione e poi cosa mi compare a video:

    CODICE:

    int carica(FILE *f,automobile el[])

    {
    int i,k,n;
    fscanf(f,"%d",&n);

    for(i=0;!feof(f);i++){
    fscanf(f,"!");
    for(k=0;(el[i].marca[k]=fgetc(f))!='!';k++);
    el[i].marca[k]='\0';
    for(k=0;((el[i].modello[k]=fgetc(f))!='!')&&!feof(f);k++);
    el[i].modello[k]='\0';
    fscanf(f,"%f!\n",&(el[i].prezzo));

    }

    return i;

    }

    SCHERMATA A VIDEO:

    digitare il nome del file da caricare: auto.txt
    sono stati caricati 10 record dal file auto.txt
    Premere un tasto per continuare . . .
    visualizzazione dell'elenco a video:

    !Opel!0.00
    Astra!18000.00!0.00
    Fiat!Punto!13500.00
    Audi!A4!32000.00
    Renault!Megane!22999.99
    Fiat!Punto!13500.00
    Opel!Corsa!12300.00
    Alfa Romeo!147!29999.99
    Citroen!C3!14850.00
    Fiat!Multipla!15550.00
    Premere un tasto per continuare . . .


    potreste gentilmente correggere il mio errore..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 © 2025 vBulletin Solutions, Inc. All rights reserved.