Nessun problema. Se non vuoi variabili globali allora ste variabili devono stare nel main. Ad ogni funzione passerai il vettore delle strutture (vedi il mio bubble sort) e anche il numero degli account già inseriti.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NCHAR 20
// Definizione della struttura
typedef struct {
char nome[NCHAR];
char cognome[NCHAR];
char telefono[NCHAR];
} account;
void InsContatto (char nom[], char cogn[], char tel[], account *anonimo, int & num_account)
{ //OPEN InsContatto
strcpy (anonimo[num_account].nome,nom);
strcpy (anonimo[num_account].cognome,cogn);
strcpy (anonimo[num_account].telefono,tel);
num_account++;
return;
} //CLOSED InsContatto
void Visualizza (char nom[], char cogn[], account *anonimo, int & num_account)
{ //OPEN Visualizza
int i = 0;
bool flag = false;
for (i=0; i < num_account && !flag; i++)
{ //OPEN for
if (!(strcmp(nom,anonimo[i].nome)) && (!strcmp(cogn,anonimo[i].cognome)))
{ //OPEN if
printf ("Il contatto scelto e': \n");
printf ("\n%s %s\n", anonimo[i].nome, anonimo[i].cognome);
printf ("%s", anonimo[i].telefono);
printf ("\n\n");
flag = true;
} //CLOSED if
} //CLOSED for
if(!flag)
{ //OPEN else
printf ("Il contatto non esiste");
printf ("\n\n");
} //CLOSED else
} //CLOSED Visualizza
// Dichiarazione delle funzioni
void VisualizzaTutti(account *anonimo, int & num_account)
{
int i = 0;
for(i = 0; i < num_account; i++)
{
printf("Contatto %d:\tNome:\t%s\tCognome:\t%s\tTelefono:\t%s\n",i+i,anonimo[i].nome,anonimo[i].cognome,anonimo[i].telefono);
}
}
void bubbleSort(account *anonimo, int & num_account)
{
int alto = num_account - 1;
int i = 0;
while(alto > 0)
{
for(i = 0; i < alto; i++)
{
if(strcmp(anonimo[i].cognome,anonimo[i+1].cognome) > 0)
{
account temp;
strcpy(temp.cognome,anonimo[i].cognome);
strcpy(temp.nome,anonimo[i].nome);
strcpy(temp.telefono,anonimo[i].telefono);
strcpy(anonimo[i].cognome,anonimo[i+1].cognome);
strcpy(anonimo[i].nome,anonimo[i+1].nome);
strcpy(anonimo[i].telefono,anonimo[i+1].telefono);
strcpy(anonimo[i+1].cognome,temp.cognome);
strcpy(anonimo[i+1].nome,temp.nome);
strcpy(anonimo[i+1].telefono,temp.telefono);
}
}
alto--;
}
}
int main()
{
account anonimo[100];
int num_account = 0;
int scelta = -1; /* per inserire la scelta del menù */
char n[NCHAR]; /* per inserire il nome */
char m[NCHAR]; /* per inserire il cognome */
char t[NCHAR]; /* per inserire il numero di telefono */
char ch = '\0';
for (;scelta!= 0;)
{ //OPEN for
printf ("Programma per la gestione della rubrica di uno smartphone\n");
printf ("\n4 - Ordina x cognome e visualizza\n");
printf ("\n3 - Visualizza tutti\n");
printf ("\n2 - Visualizza Contatto\n");
printf ("\n1 - Inserisci Contatto\n");
printf ("\n0 - Esci dal programma\n");
printf ("\nDigita: ");
scanf ("%d", &scelta);
switch (scelta)
{
case 0: // Exit
{
printf ("\nGrazie per la scelta\n\n");
}
break;
case 1: // Inserisci contatto
{
printf ("Nome: ");
scanf("%s", n);
printf ("Cognome: ");
scanf ("%s", m);
printf ("Telefono: ");
scanf ("%s", t);
printf ("\n");
InsContatto(n,m,t,anonimo,num_account);
}
break;
case 2: // Visualizza
{
printf ("\nNome: ");
scanf ("%s", n);
printf ("Cognome: ");
scanf ("%s", m);
Visualizza (n,m,anonimo,num_account);
}
break;
case 3: // Visualizza tutti
{
printf("Visualizza tutti\n");
VisualizzaTutti(anonimo,num_account);
}
break;
case 4: // Ordina secondo cognome poi visualizza
{
printf("Ordina secondo cognome poi visualizza\n");
bubbleSort(anonimo,num_account);
VisualizzaTutti(anonimo,num_account);
}
break;
} //CLOSED switch
} //CLOSED for
system ("Pause");
return 0;
} //CLOSED main