fork download
  1. #include <stdio.h> // <stdio.h> contains a definition for `size_t`
  2.  
  3. // trying to find the minimum odd number in an array with just even numbers (or no numbers) is UB
  4. int oddmin(int *array, size_t length) {
  5. size_t index = 0;
  6. while (array[index] % 2 == 0) index++; /* skip even numbers */;
  7. int minodd = array[index++]; // first odd number
  8. while (index < length) {
  9. if (array[index] % 2) {
  10. if (array[index] < minodd) minodd = array[index];
  11. }
  12. index++;
  13. }
  14. return minodd;
  15. }
  16.  
  17. int main(void) {
  18. int a[] = {1, 2, 3, -4, -5, -6, 7, 8, 9};
  19. printf("odd minimum of array a is %d.\n", oddmin(a, 9));
  20. int b[] = {1001};
  21. printf("odd minimum of array b is %d.\n", oddmin(b, 1));
  22. int c[] = {2, 2, 2, 2, 2, 2, 2, -3, 2, 2, 2, 2, 2, 2};
  23. printf("odd minimum of array c is %d.\n", oddmin(c, sizeof c / sizeof *c));
  24. int d[] = {2, 2, 2, 2, 2, 2, 2, -3, 2, 2, 2, -5, 2, 2};
  25. printf("odd minimum of array d is %d.\n", oddmin(d, sizeof d / sizeof *d));
  26. int e[] = {2, 2, 2, 2, 2, 2, 2, -5, 2, 2, 2, -3, 2, 2};
  27. printf("odd minimum of array e is %d.\n", oddmin(e, sizeof e / sizeof *e));
  28. int f[] = {42, 42, 42, 42};
  29. printf("odd minimum of array f is **UB** (%d).\n", oddmin(f, sizeof f / sizeof *f));
  30. int g[] = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3};
  31. printf("odd minimum of array g is %d.\n", oddmin(g, sizeof g / sizeof *g));
  32. }
  33.  
Success #stdin #stdout 0s 9424KB
stdin
Standard input is empty
stdout
odd minimum of array a is -5.
odd minimum of array b is 1001.
odd minimum of array c is -3.
odd minimum of array d is -5.
odd minimum of array e is -5.
odd minimum of array f is **UB** (1).
odd minimum of array g is 3.