Linguaggio c

luca981
non capisco questa linea
res=fgets(buf, 200, fd); /*legge le righe dal file fd e le chiama con la variabile res e buf ??*/
e perche si scrive exit(1); ?? e non exit(); o exit; ??

questo e il programma completo
/*
Lettura di un file riga per riga.
*/

#include
#include

int main()
{
FILE *fd;
char buf[200];
char *res;


/* apre il file */
fd=fopen("righe.txt", "r");
if( fd==NULL )
{
printf("ciao");
perror("Errore in apertura del file ciao \n");
exit(1);
}


/* legge e stampa ogni riga */
while(1)
{
res=fgets(buf, 200, fd); /*legge le righe dal file fd e le chiama con la variabile res e buf ??*/
if( res==NULL ) break;
printf("%s", buf);
}

/* chiude il file */
fclose(fd);

return 0;
}
------------------------
grazie per la pazzienza !

Risposte
luca981
ho notato che per fare la spiegazione di tante funzioni , molti siti scrivono in questo modo :
#include

char *fgets(char *s, int size, FILE *stream);
char *gets(char *s);

int scanf(const char *format, ...);
int fscanf(FILE *stream, const char *format, ...);
int sscanf(const char *str, const char *format, ...);

ecc...

non capisco perche all inizzio c'e int o char ?
perche le funzioni fgets ad esempio dichiarano al interno delle parentesi il nome da dare alla variabile ?
anche scanf dichiara tra le parentesi di nome della variabile che viene utilizzata .
ciao grazie

eugenio.amitrano
char *fgets(char *s, int size, FILE *stream);


memorizza nella stringa 's' una riga dal file puntato da 'fd' di lunghezza 'size'.
Se 'size' dovesse superare la lunghezza della riga, in 's' viene memorizzata l'intera riga.

scrivere
char *res;
...
res = fegets( ......

res punta alla stringa memorizzata nella variabile s.
Se non viene letto nulla, perchè magari è finito il file, allora 'res' non punta a nulla e quindi vale 'NULL'.

eugenio.amitrano
La funzione exit, richiede un parametro che indica lo stato del programma quando viene terminato con tale funzione.

questo valore può essere 0 (per indicare status = SUCCESS), oppure 1 (per indicare status = FAILURE).

'exit(0)' oppure 'exit(EXIT_SUCCESS)' indica una fine esecuzione regolare regolare.
'exit(1)' oppure 'exit(EXIT_FAILURE)' indica una fine esecuzione dovuta ad un errore.

eugenio.amitrano
Personalmente preferisco non usare la funzione exit,
vedi se ti piace questa alternativa.

ATTENZIONE: Non l'ho compilato, quindi potrebbe contenere qualche errore!

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

#define ROW_SIZE 200
#define FILE_NAME "Righe.txt"

int main() 
{ 
   FILE *fpSource; 
   char sBuffer[SIZE]; 

   if((fpSource = fopen(FILE_NAME, "r")) != NULL)
   {
      printf("Contenuto del file %s:\n", FILE_NAME);
      while((fgets(sBuffer, ROW_SIZE, fpSource)) != NULL) 
      { 
         printf("%s", sBuffer); 
      }
   }
   else
   {
      perror("Errore in apertura del file. \n"); 
   }
   
   fclose(fpSource); 
   return 0; 
}

luca981
#include
#include

#define ROW_SIZE 200
#define FILE_NAME "Righe.txt"

main()
{
FILE *fpSource;
char sBuffer[ROW_SIZE];

if((fpSource = fopen("righe.txt", "r")) != NULL)
{
printf("Contenuto del file %s:\n", FILE_NAME);
while((fgets(sBuffer, ROW_SIZE, fpSource)) != NULL)
{
printf("%s", sBuffer);
}
}
else
{
perror("Errore in apertura del file. \n");
}

fclose(fpSource);
}
/*
il programmino funziona correttamente ed e molto chiaro !
*/
-----------------------------------------------
praticamente
res=fgets(buf, 200, fd);
char res e char buf sono identici .

char *fgets(char *s, int size, FILE *stream);
char *gets(char *s);
int scanf(const char *format, ...);
int fscanf(FILE *stream, const char *format, ...);
int sscanf(const char *str, const char *format, ...);

praticamente per indicare le funzioni che hanno un dato in uscita ,
davanti alla funzione si scrive char o int a seconda del tipo di variabile ,
se non ci sono dati in uscita si scrive void .
? giusto ? e cosi ?

eugenio.amitrano
"luca98":

praticamente per indicare le funzioni che hanno un dato in uscita ,
davanti alla funzione si scrive char o int a seconda del tipo di variabile ,
se non ci sono dati in uscita si scrive void .
? giusto ? e cosi ?


Giusto.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.