fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct DynArray {
  5. double *data;
  6. size_t m; // total
  7. size_t n; // used
  8. };
  9.  
  10. void growarray(struct DynArray *x) {
  11. size_t newsize = x->m * 13 / 8 + 1; // use phi aproximation 13/8
  12. double *newarr = realloc(x->data, newsize * sizeof *x->data);
  13. if (!newarr) exit(EXIT_FAILURE);
  14. fprintf(stderr, "INFO: realloc'ed with %d elements.\n", (int)newsize);
  15. x->data = newarr;
  16. x->m = newsize;
  17. }
  18.  
  19. int main(void) {
  20. struct DynArray numbers = { 0 };
  21. double newnum;
  22. while (scanf("%lf", &newnum) == 1 && newnum != -1) {
  23. if (numbers.n == numbers.m) growarray(&numbers);
  24. numbers.data[numbers.n] = newnum;
  25. numbers.n++;
  26. }
  27.  
  28. for (int i = numbers.n - 1; i >= 0; --i) {
  29. printf("%f\n", numbers.data[i]);
  30. }
  31.  
  32. free(numbers.data);
  33.  
  34. return 0;
  35. }
  36.  
Success #stdin #stdout #stderr 0s 9424KB
stdin
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 -1
stdout
987.000000
610.000000
377.000000
233.000000
144.000000
89.000000
55.000000
34.000000
21.000000
13.000000
8.000000
5.000000
3.000000
2.000000
1.000000
1.000000
0.000000
stderr
INFO: realloc'ed with 1 elements.
INFO: realloc'ed with 2 elements.
INFO: realloc'ed with 4 elements.
INFO: realloc'ed with 7 elements.
INFO: realloc'ed with 12 elements.
INFO: realloc'ed with 20 elements.