/* File: contaclf.c */
/* Time-stamp: "2002-05-14 22:49:00 calvanes" */
/* Scopo: lettura da file con fscanf e feof */

#include <stdio.h>

int main (void)
{
  char nomefile[13];
  FILE *fp;
  int caratteri = 0;
  int linee = 0;
  char ch;

  printf("Immetti il nome del file: ");
  scanf("%12s", &nomefile);

  if ((fp = fopen(nomefile, "r")) == NULL) {
    printf("Errore in apertura in lettura del file %s!\n", nomefile);
    exit(1);
  }

  fscanf(fp, "%c", &ch);
  while (!feof(fp)) {
    /* N.B. l'indicatore di fine file viene impostato solo dopo aver tentato di
       leggere oltre la fine del file. */
    caratteri++;
    if (ch == '\n')
      linee++;
    fscanf(fp, "%c", &ch);
  }

  fclose(fp);

  printf("Il numero di caratteri e` %d.\n", caratteri);
  printf("Il numero di linee e` %d.\n", linee);


  /* Alternativa che usa il valore di ritorno di fscanf per verificare la
     terminazione del file. */

  printf("Secondo conteggio\n");

  caratteri = 0;
  linee = 0;

  if ((fp = fopen(nomefile, "r")) == NULL) {
    printf("Errore in apertura in lettura del file %s!\n", nomefile);
    exit(1);
  }

  while (fscanf(fp, "%c", &ch) == 1) {
    caratteri++;
    if (ch == '\n')
      linee++;
  }

  fclose(fp);

  printf("Il numero di caratteri e` %d.\n", caratteri);
  printf("Il numero di linee e` %d.\n", linee);

  return 0;
}