Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    168

    [C] ciclo for e EOF

    salve... ho un dubbio... come si impone che un ciclo for di lettura venga eseguito fino alla fine di un file di input?eof

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,299
    Cosa usi per leggere dal file? Che tipo di lettura stai facendo?

    In genere non si usa il for ma un do ... while ...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    168
    devo leggere dal file valori di tipo int...devo mettere come impostazione che se il file termina..il ciclo for che mi fa leggere questi valori si interrompa...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,299
    Un ciclo for presuppone che tu sappia quanti sono i dati da leggere e questi siano certamente presenti ... anche se puoi comunque usarlo - ripeto - e' piu' "logico" usare il do while ...

    Hai scritto del codice per l'apertura e la lettura del file o no?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    168
    il codice è questo...

    n è un numero che viene anchesso letto...ma se i dati che ci sono nel file sono inferiori a n il ciclo ripete dall'inizio...io voglio che si interrompa...

    codice:
    for (f=0;f<n;f++)
          { 
          fgets (s,30,fp); 
          sscanf (s,"%d %d %d %d\r\n", &mat[f][0],&mat[f][1],&mat[f][2],&vet[f]); 
          }

  6. #6
    Originariamente inviato da miscialo
    io voglio che si interrompa...
    codice:
    for (f=0;f<n && !feof (fp);f++)
    ....
    AndreaSenior Java developerSCJP 5 (91%) – SCWCD 5 (94%)
    Il mio nuovo sito-blog italiano sulla programmazione: andbin.it

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,299
    Oppure


    if(!fgets(s, 30, fp)) break;

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    168
    quando vado a stampare mi stampa dei numeri strani alla fine...penso che consideri i segnaposti...ho provato amettere il blocco di fine file al ciclo di stampa e mi da errore...


    codice:
     
    
       /*Leggi n*/
    fgets (s,30,fp); 
       sscanf (s,"%d",&n); 
    
      
       /*Leggi la matrice della locazione + la massa*/
       for (f=0;f<n;f++)
          { 
          fgets (s,30,fp); 
          sscanf (s,"%d %d %d %d\r\n", &mat[f][0],&mat[f][1],&mat[f][2],&vet[f]); 
          }

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    168
    questo è il mio programma...se metto for (f=0;f<n && !feof (fp);f++) nella funzione fget_point_mass , la lettura si ferma e questo va bene...però la funzione fwrite_point_mass utilizzando anchessa un ciclo continua a stampare...se metto for (f=0;f<n && !feof (fp);f++) in fwrite_point_mass il prompt mi da errore...cosa dovrei fare secondo voi??

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    #define DIM_LOC 3
    #define N_MAX 10
    
    int fget_point_mass (int n, int mat[][DIM_LOC], int vet[]);
    void center_grav (int n, int mat[][DIM_LOC], int vet[], float &cx, float &cy, float &cz);
    void fwrite_point_mass (int n, int mat[][DIM_LOC], int vett_masse[], float cx, float cy, float cz);
    
    int main (void)
    { 
       
       int vett_masse[N_MAX];
       int mat[N_MAX][DIM_LOC];
       int f,n;
    
       float cx = 0, cy = 0, cz = 0;
    
       n = fget_point_mass (n, mat, vett_masse);
    
       if (!n)
          {
          system ("pause");
          return 0;
          }
    
       center_grav (n, mat, vett_masse, cx, cy, cz);
    
       fwrite_point_mass(n, mat, vett_masse, cx, cy, cz);
    
       system("pause");
       return(0);
    }
    
    
    //Definizione funzioni
    int fget_point_mass(int n, int mat[][DIM_LOC], int vet[])
    {
       int f;
       FILE *fp; 
       char s [30];
       
       fp = fopen ("points.dat","r");
        if (fp == NULL)  
           {
           printf ("File di database non trovato, nessun dato caricabile.\n");
           return 0;
           }
        
       /* Leggi la prima riga (n = numero di elementi) */
       fgets (s,30,fp); 
       sscanf (s,"%d",&n); 
       if ((n < DIM_LOC)||(n > N_MAX))
         { 
         printf    (" E' presente un errore. Controllare il file di input.\n");
         return 0;
         }
      
       /*Leggi la matrice della locazione + la massa*/
       for (f=0;f<n;f++) 
          { 
          fgets (s,30,fp); 
          sscanf (s,"%d %d %d %d\r\n", &mat[f][0],&mat[f][1],&mat[f][2],&vet[f]); 
          }
     return n;
    }
    
    
    void center_grav (int n, int mat[][DIM_LOC], int vet[], float &cx, float &cy, float &cz)
    {
       int f;
       float totmasse = 0;
       float c1 = 0,  c2 = 0,  c3= 0;
    
       for (f = 0; f < n; f++)       {
          totmasse = totmasse + vet[f];
          c1 = c1 + (vet[f] * mat[f][0]);
          c2 = c2 + (vet[f] * mat[f][1]);
          c3 = c3 + (vet[f] * mat[f][2]);
          }
       cx = (1/totmasse)*(c1);
       cy = (1/totmasse)*(c2);
       cz = (1/totmasse)*(c3);
    }
    
    void fwrite_point_mass (int n, int mat[][DIM_LOC], int vett_masse[], float cx, float cy, float cz)
    {
       int f;
         
        /*Stampa la locazione*/
       printf    (" Locazione:\n");
       for (f=0;f<n;f++)       printf ("               %d %d %d \n\n", mat[f][0],mat[f][1],mat[f][2]);
    
       /*Stampa la massa*/
       printf    (" Masse:\n\n");
       for (f=0;f<n;f++)       printf ("               %d\n\n", vett_masse[f]);
    
       /* Stampare il numero n */
       printf (" n:\n               %d\n\n", n);
       
       /*Stampa in centro di gravità*/
       printf ("Il centro di gravita' C e' ( %.3f, %.3f, %.3f )\n\n" , cx, cy, cz );
    }

  10. #10
    Originariamente inviato da miscialo
    però la funzione fwrite_point_mass utilizzando anchessa un ciclo continua a stampare...
    In che senso continua a stampare?! "Quanto" stampare è determinato da 'n'.

    Originariamente inviato da miscialo
    se metto for (f=0;f<n && !feof (fp);f++) in fwrite_point_mass il prompt mi da errore...cosa dovrei fare secondo voi??
    Beh, certo, in fwrite_point_mass non hai fp, non usi alcun file.

    Tra l'altro a fget_point_mass passi un valore 'n' che non serve, infatti 'n' è in output, non in input.
    AndreaSenior Java developerSCJP 5 (91%) – SCWCD 5 (94%)
    Il mio nuovo sito-blog italiano sulla programmazione: andbin.it

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