I'm making a simple menu program (adapted from example in "C programming in easy steps", M.McGrath, pg74), however when running the program the again() function does not scan for a character, it prints and then automatically chooses the else command in the function. It does not return to menu() when Y or y are chosen. The program works as expected when ag is an integer and not a character. How can this be rectified?
#include <stdio.h>
void menu ();
void getnum ();
void getnums ();
void again ();
int square (int x);
int multiply (int x, int y);
int
main ()
{
  menu ();
  printf ("End \n");
  return 0;
}
void
menu ()
{
  int num;
  printf ("\n Enter the number of an operation.");
  printf ("\n1. Square a number.");
  printf ("\n2. Multiply two numbers.");
  printf ("\n3. Exit.\n");
  scanf ("%d", &num);
  switch (num)
    {
    case 1:
      getnum ();
      break;
    case 2:
      getnums ();
      break;
    case 3:
      return;
    }
}
void
getnum ()
{
  int num;
  printf ("\nEnter a number to be squared:");
  scanf ("%d", &num);
  printf ("%d squared is %d.", num, square (num));
  again();
}
void
getnums ()
{
  int num1, num2;
  printf ("\nEnter two numbers to be multiplied, seperated by a space:");
  scanf ("%d", &num1);
  scanf ("%d", &num2);
  printf ("%d multiplied by %d is %d.", num1, num2, multiply (num1, num2));
  again ();
    }
int
square (int x)
{
  return (x * x);
}
int
multiply (int x, int y)
{
  return (x * y);
}
void
again ()
{
   int ag;
   printf ("\nPerform another opperation? Y or N");
  scanf ("%c" , &ag);
  if ((ag == 'Y') || (ag == 'y'))
    menu ();
  else
    return;
}
