Niente. Ho usato getchar, getc, gets, fgets. Non riesco a far funzionare questa istruzione ed ormai dopo due giorni sono entrato nel baldassone e sto uscendo pazzo.

Posto il codice. Se qualcuno di buona volontà ha la voglia di modificare la parte che mi serve in modo tale da farmi vedere dove sbaglio, ne sarei contento.

codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define ELEM 100
#define NCHAR 20

// Definizione della struttura
typedef struct {
					char nome[NCHAR];
					char cognome[NCHAR];
					char telefono[NCHAR];
					char citta[NCHAR];
		       } account;

// Variabili globali
account rubrica[ELEM];
int num_account = 0;

// Dichiarazione delle funzioni
void InsContatto (char nom[], char cogn[], char tel[], char cit[]);
void ModContatto (char nom[], char cogn[]);
void Cancella (char nom[], char cogn[]);
void Visualizza (char nom[], char cogn[]);

int main()
{ //OPEN main
     short int scelta, i; /* per inserire la scelta del men˘ */
     char n[NCHAR]; /* per inserire il nome */
     char m[NCHAR]; /* per inserire il cognome */
     char c[NCHAR]; /* per inserire la citt‡ */
     char t[NCHAR]; /* per inserire il numero di telefono */
     char ch = '\0';
     for (;scelta!= 0;)
     { //OPEN for
    	  printf ("\nLorenzo Carnevale\n");
    	  printf ("Rubrica V 1.0\n\n");
          printf ("\t\t  INDEX\n");
          printf ("\t***************************\n");
          printf ("\t* 1 - Inserisci Contatto  *\n");
          printf ("\t* 2 - Modifica Contatto   *\n");
          printf ("\t* 3 - Cancella Contatto   *\n");
          printf ("\t* 4 - Visualizza Contatto *\n");
          printf ("\t*                         *\n");
          printf ("\t* 0 - Esci dal programma  *\n");
          printf ("\t***************************\n\n");
          printf ("Digita: ");
          scanf ("%hd", &scelta);
          switch (scelta)
          { //OPEN switch
                 case 0: // Exit
                           printf ("\n\t\tGrazie per la scelta\n\n");
                           break;
                 case 1: // Inserisci contatto
                           printf ("\nNome: ");
                           for (i=0;(i<20) && ((ch=getchar())!='\n');i++)
                        	   if (ch != '\b') n[i] = ch;
                           n[i] = '\0';
                           printf ("Cognome: ");
                           scanf ("%s", m);
                           printf ("Telefono: ");
                           scanf ("%s", t);
                           printf ("Citta': ");
                           scanf ("%s", c);
                           printf ("\n");
                           InsContatto(n,m,t,c);
                           break;
                 case 2: // Modifica Contatto
                           printf ("\nNome: ");
                           scanf ("%s", n);
                           printf ("Cognome: ");
                           scanf ("%s", m);
                           ModContatto (n,m);
                           break;
                 case 3: // Cancella
                           printf ("\nNome: ");
                           scanf ("%s", n);
                           printf ("Cognome: ");
                           scanf ("%s", m);
                           Cancella (n,m);
                           break;
                 case 4: // Visualizza
                           printf ("\nNome: ");
                           scanf ("%s", n);
                           printf ("Cognome: ");
                           scanf ("%s", m);
                           Visualizza (n,m);
                           break;
          } //CLOSED switch
    } //CLOSED for
    return 0;
} //CLOSED main

// Definizione delle funzioni
void InsContatto (char nom[], char cogn[], char tel[], char cit[])
{ //OPEN InsContatto
     int i;
     if (num_account == ELEM)
     { //OPEN if
         printf ("Hai raggiunto il limite di contatti offerto\n\n");
         return;
     } //CLOSED if
     for (i=0; i<=num_account; i++)
     { //OPEN for
         if ((strcmp (nom,rubrica[i].nome)==0) && (strcmp (cogn,rubrica[i].cognome)==0))
         { //OPEN if
            printf ("Nome e Cognome utente esistono in memoria\n\n");
            return;
         } //CLOSED if
     } //CLOSED for
     strcpy (rubrica[num_account].nome,nom);
     strcpy (rubrica[num_account].cognome,cogn);
     strcpy (rubrica[num_account].telefono,tel);
     strcpy (rubrica[num_account].citta,cit);
     num_account++;
     return;
} //CLOSED InsContatto

void ModContatto (char nom[], char cogn[])
{ //OPEN ModContatto
     int i;
     for (i=0; i<=num_account; i++)
     { //OPEN for
         if ((strcmp (nom,rubrica[i].nome)!=0) && (strcmp (cogn,rubrica[i].cognome)!=0))
         { //OPEN if
            printf ("Il contatto non esiste");
            printf ("\n\n");
            return;
         } //CLOSED if
         else
         { //OPEN else
             printf("Nuovo Nome: ");
             scanf("%s", rubrica[i].nome);
             printf("Nuovo Cognome: ");
             scanf("%s", rubrica[i].cognome);
             printf("Nuovo Telefono: ");
             scanf("%s", rubrica[i].telefono);
             printf("Nuova Citta': ");
             scanf("%s", rubrica[i].citta);
             return;
         } //CLOSED else
     } //CLOSED for
} //CLOSED ModContatto

void Cancella (char nom[], char cogn[])
{ //OPEN cancella
     int i;
     for (i=0; i<=num_account; i++)
     { //OPEN for
         if ((strcmp (nom,rubrica[i].nome)!=0) && (strcmp (cogn,rubrica[i].cognome)!=0))
         { //OPEN if
            printf ("Il contatto non esiste");
            printf ("\n\n");
            return;
         } //CLOSED if
         else
         { //OPEN else
            rubrica[i].nome[0] ='\0';
            rubrica[i].cognome[0] ='\0';
            rubrica[i].telefono[0] ='\0';
            rubrica[i].citta[0] ='\0';
            return;
         } //CLOSED else
     } //CLOSED for
} //CLOSED Cancella

void Visualizza (char nom[], char cogn[])
{ //OPEN Visualizza
     int i;
     for (i=0; i<=num_account; i++)
     { //OPEN for
         if ((strcmp (nom,rubrica[i].nome)==0) && (strcmp (cogn,rubrica[i].cognome)==0))
         { //OPEN if
            printf ("Il contatto scelto e': \n");
            printf ("\n%s %s\n", rubrica[i].nome, rubrica[i].cognome);
            printf ("%s\n%s", rubrica[i].telefono, rubrica[i].citta);
            printf ("\n\n");
            return;
         } //CLOSED if
         else
         { //OPEN else
            printf ("Il contatto non esiste");
            printf ("\n\n");
            return;
         } //CLOSED else
     } //CLOSED for
} //CLOSED Visualizza
Il ciclo getchar è solo nella prima istruzione possibile, le altre non le ho modificate.