/*** This program reads the data from the a file (called tmp.dat) to a
variable, x. You don't need to know the number of data points in the file
a priori. The integer 'i' counts them in the while/for loop.
***/
#include <stdio.h>
#include <math.h>
main()
{
double x,sigma,x_m;
int i;
FILE *ifp; /* if you are reading or writing data
using files you must declare some
file pointers of type FILE */
ifp = fopen("tmp.dat", "r"); /* a line like this is also required*/
/* this opens the file called tmp.dat*/
/* for reading */
/* and sets the file pointer (ifp) to*/
i = 0.0; /* point at the first entry in tmp.dat*/
sigma = 0.0;
x_m = 0.0;
while( fscanf(ifp, "%lf", &x) == 1 ) /* the condition for this while loop. */
{ /* to be true is "while fscanf returns*/
x_m += x; /* one number" ie as long as a number */
i++; /* is read, keep adding it to x_m */
} /* note that 'i' is incremented each */
x_m /= (double)i; /* time a number is read so it keeps */
printf("%d", i); /* track of the total number of numbers*/
/*
for ( i=0; fscanf(ifp, "%lf", &x) ==1; i++)
{
x_m += x;
}
x_m /= (double)i;
*/
/* in this program we read the data from the file twice */
/* the second time we must re-set the pointer "ifp" to the */
/* beginning of the file, tmp.dat */
ifp = fopen("tmp.dat", "r");
while ( fscanf(ifp, "%lf", &x) ==1 )
{
sigma += (x - x_m)*(x - x_m);
}
sigma = sqrt(sigma/N);
printf("the mean is %lf\n
the standard deviation is %lf\n", x_m, sigma);
}