/* File: contaatt.c */
/* Time-stamp: "2001-03-29 17:02:58 calvanes" */
/* Scopo: uso di variabili statiche per contare il numero di attivazioni di una
          funzione
*/

#include <stdio.h>

int contaTot = 0;        /* variabile globale statica visibile da qui in poi */


int fun1(void)
  /* Conta e restituisce il numero complessivo di attivazioni di se` stessa.
     Incrementa anche il contatore di attivazioni globale.
  */
{
  static int conta = 0;   /* variabile locale statica visibile solo in fun1;
                             contatore del numero di attivazioni di fun1    */
  contaTot++;
  conta++;
  return conta;
}


int fun2(void)
  /* Conta e restituisce il numero complessivo di attivazioni di se` stessa.
     Incrementa anche il contatore di attivazioni globale.
  */
{
  static int conta = 0;   /* variabile locale statica visibile solo in fun2;
                             contatore del numero di attivazioni di fun2     */
  contaTot++;
  conta++;
  return conta;
}


int main(void)
{
  char ch;
  int conta;            /* variabile locale automatica visibile solo in main */

  do {
    printf("\nInserire un carattere:\n");
    printf(" 1 ... per attivare fun1\n");
    printf(" 2 ... per attivare fun2\n");
    printf(" f ... per terminare\n");
    ch = getchar();
    scanf("%*[^\n]");  /* per saltare i caratteri rimanenti */
    getchar();         /* per saltare '\n' */

    switch (ch) {
    case '1': conta = fun1(); break;
    case '2': conta = fun2(); break;
    }

    if (ch == '1' || ch == '2')
      printf("numero di attivazioni di fun%c        = %d\n", ch, conta);
    printf("numero di attivazioni di fun1 o fun2 = %d\n", contaTot);
  } while (ch != 'f' && ch != 'F');

  printf("Ciao\n");
  return 0;
}