ixamit ha scritto:
Ti allego un bozzeto per caricare l'eventuale lista di valori.
#include <stdio.h>
#include <stdlib.h>
struct s_dati
{
float a;
float b;
float c;
float d;
struct s_dati *next;
};
struct s_dati *FIRST=NULL;
struct s_dati *LAST =NULL;
void show_list (int n)
{
struct s_dati *node=FIRST;
printf ("There are %d element(s) loaded:\n",n);
while (node)
{
printf ("a=%04.0f b=%02.0f c=%01.2f d=%02.0f\n",node->a,node->b,node->c,node->d);
node=node->next;
}
}
void free_list ()
{
struct s_dati *next,*node=FIRST;
while (node)
{
next=node->next;
free (node);
node=next;
}
}
int load_file (FILE *fp)
{
int n;
struct s_dati *node;
/* Drop first line */
while (fgetc(fp)!='\n' && !feof(fp));
while (!feof(fp))
{
node=(struct s_dati*)malloc (sizeof(struct s_dati));
if (!node)
return 0;
fscanf (fp,"%f %f %f %f",&(node->a),&(node->b),&(node->c),&(node->d));
if (feof(fp))
{
free (node);
break;
}
/*
------------------------------------
Add your check code here
use free(node) and 'break' to return
------------------------------------
*/
n++;
node->next=NULL;
if (!FIRST) FIRST=node;
if (LAST) LAST->next=node;
LAST=node;
}
return n;
}
main()
{
FILE *fp;
int n;
fp=fopen ("./file","r");
if (!fp)
return 1;
n=load_file (fp);
show_list (n);
free_list ();
fclose (fp);
return 0;
}
inanzitutto grazie, posso chiederti se mi puoi spiegare meglio cosa fa il codice?
io ho capito che risolve il mio problema, ma non ho ben capito come, scusa ma di c non me ne intento ancora bene, e anche perchè nel compilarlo mi sono venuti degli errori....
codice.c: In function ‘load_file’:
codice.c:56: warning: ignoring return value of ‘fscanf’, declared with attribute warn_unused_result
codice.c: At top level:
codice.c:84: warning: return type defaults to ‘int’
ah poi ho visto che usi un comando "break" io ho letto che è meglio non usarli, se lo volessi sostituite che altro comando potrei usare grazie...