It seems like you're having trouble adding suitable logic to main() because that logic belongs in the actual iterative calculation, e.g. in your eSeries function. @chux pushed the stop condition into eSeries(), while @Weather Vane pulled the iteration up into main(), either is fine.
I'll offer the following as my own take on the problem - I thought you'd find it it interesting to see the behavior of eSeries() with various "target thresholds"...
output from e.c
$ gcc e.c
$ ./a.out
hello from eSeries, threshold=0.100000
i/ n : diff : current approx of 'e'
1/100 : 1.00000000 : 2.00000000
2/100 : 0.50000000 : 2.50000000
3/100 : 0.16666675 : 2.66666675
4/100 : 0.04166675 : 2.70833349
hello from eSeries, threshold=0.010000
i/ n : diff : current approx of 'e'
1/100 : 1.00000000 : 2.00000000
2/100 : 0.50000000 : 2.50000000
3/100 : 0.16666675 : 2.66666675
4/100 : 0.04166675 : 2.70833349
5/100 : 0.00833344 : 2.71666694
hello from eSeries, threshold=0.001000
i/ n : diff : current approx of 'e'
1/100 : 1.00000000 : 2.00000000
2/100 : 0.50000000 : 2.50000000
3/100 : 0.16666675 : 2.66666675
4/100 : 0.04166675 : 2.70833349
5/100 : 0.00833344 : 2.71666694
6/100 : 0.00138879 : 2.71805573
7/100 : 0.00019836 : 2.71825409
hello from eSeries, threshold=0.000100
i/ n : diff : current approx of 'e'
1/100 : 1.00000000 : 2.00000000
2/100 : 0.50000000 : 2.50000000
3/100 : 0.16666675 : 2.66666675
4/100 : 0.04166675 : 2.70833349
5/100 : 0.00833344 : 2.71666694
6/100 : 0.00138879 : 2.71805573
7/100 : 0.00019836 : 2.71825409
8/100 : 0.00002480 : 2.71827888
$
e.c source code
#include <stdio.h>
float eSeries (int n, float threshold){
int nFact = 1;
float e = 1.0;
float last = e;
int i;
printf("hello from eSeries, threshold=%f\n", threshold );
printf("%3s/%3s : %8s : %s\n", "i", "n", "diff", "current approx of 'e'" );
for (i = 1; i < n; i++) {
nFact *= i;
e = e + (1.0 / nFact);
float diff = e - last;
last = e;
printf("%3d/%3d : %8.8f : %8.8f\n", i, n, diff, e );
if( diff < threshold ) break; // good enough, stop early
}
return e;
}
int main(int argc, char const *argv[]) {
float current;
float past;
int count = 0;
eSeries( 100, 0.1 );
eSeries( 100, 0.01 );
eSeries( 100, 0.001 );
eSeries( 100, 0.0001 );
//do {
// here's where i can't get the logic right.
//} while(current != past);
return 0;
}