inline S generalized_mean(I first, I last, T p) { // Check for well known cases. if (p == -1) return harmonic_mean(first, last); if (p == 0) return geometric_mean(first, last); if (p == 1) return arithmetic_mean(first, last); if (p == 2) return quadratic_mean(first, last); if (p == 3) return cubic_mean(first, last); // Either handle the infinity case or compute the generalized // value. if (is_infinity(p)) return generalized_mean_inf(first, last, p); else return generalized_mean_non_inf(first, last, p); }
int main(void) { char ch; int status; double i, j; while(printf("Enter two non-zero integers (q to quit): "), status = scanf("%lf %lf", &i, &j), (ch = getchar()) != 'q') { if (ch != '\n') { if (status == 2) { printf("Too many inputs.\n"); } else { printf("Invalid input.\n"); } while (getchar() != '\n'); continue; } if ((i == 0) || (j == 0)) { printf("Numbers cannot be zero.\n"); continue; } printf("The harmonic mean of %g and %g is %g\n", i, j, harmonic_mean(i, j)); } printf("Bye!\n"); return 0; }