text: /*********************************************************
   * From C PROGRAMMING: A MODERN APPROACH, Second Edition *
   * By K. N. King                                         *
   * Copyright (c) 2008, 1996 W. W. Norton & Company, Inc. *
   * All rights reserved.                                  *
   * This program may be freely distributed for class use, *
   * provided that this copyright notice is retained.      *
   *********************************************************/
  
  /* guess.c (Chapter 10, page 224) */
  /* Asks user to guess a hidden number */
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <time.h>
  
  #define MAX_NUMBER 100
  
  /* external variable */
  int secret_number;
  
  /* prototypes */
  void initialize_number_generator();
  void choose_new_secret_number();
  void read_guesses();
  
  int main() {
      char command;
  
      printf("Guess the secret number between 1 and %d.\n\n",
             MAX_NUMBER);
      initialize_number_generator();
      do {
          choose_new_secret_number();
          printf("A new number has been chosen.\n");
          read_guesses();
          printf("Play again? (Y/N) ");
          scanf(" %c", &command);
          printf("\n");
      } while (command == 'y' || command == 'Y');
  
      return 0;
  }
  
  /**********************************************************
   * initialize_number_generator: Initializes the random    *
   *                              number generator using    *
   *                              the time of day.          *
   **********************************************************/
  void initialize_number_generator() {
      srand((unsigned)time(NULL));
  }
  
  /**********************************************************
   * choose_new_secret_number: Randomly selects a number    *
   *                           between 1 and MAX_NUMBER and *
   *                           stores it in secret_number.  *
   **********************************************************/
  void choose_new_secret_number() {
      secret_number = rand() % MAX_NUMBER + 1;
  }
  
  /**********************************************************
   * read_guesses: Repeatedly reads user guesses and tells  *
   *               the user whether each guess is too low,  *
   *               too high, or correct. When the guess is  *
   *               correct, prints the total number of      *
   *               guesses and returns.                     *
   **********************************************************/
  void read_guesses() {
      int guess, num_guesses = 0;
  
      for (;;) {
          num_guesses++;
          printf("Enter guess: ");
          scanf("%d", &guess);
          if (guess == secret_number) {
              printf("You won in %d guesses!\n\n", num_guesses);
              return;
          } else if (guess < secret_number)
              printf("Too low; try again.\n");
          else
              printf("Too high; try again.\n");
      }
  }
  