|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2008
Città: Messina
Messaggi: 991
|
[C] Rubrica
Ciao ragazzi.
Sto, come di consueto, iniziando ad uscire pazzo. A tratti la funzione visualizza funziona ed altre volte no. Mi sapete dare una mano? Vi è anche un altro bug. Alla visualizzazione del menu in uscita da una funzione non prende l'input. Che succede?! Altre cose sono ancora in lavorazione 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[], char tel[], char cit[]);
void Cancella (char nom[], char cogn[]);
void Visualizza (char nom[], char cogn[]);
main()
{ //OPEN main
char scelta; /* 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[15]; /* per inserire il numero di telefono */
int i;
for (;scelta!= '0';)
{ //OPEN for
printf ("\t INDEX\n");
printf ("***************************\n");
printf ("* 1 - Inserisci Contatto *\n");
printf ("* 2 - Modifica Contatto *\n");
printf ("* 3 - Cancella Contatto *\n");
printf ("* 4 - Visualizza Contatto *\n");
printf ("* *\n");
printf ("* 0 - Esci dal programma *\n");
printf ("***************************\n\n");
printf ("Digita: ");
scanf ("%c", &scelta);
while (getchar() != '\n'); // Evita che scanf ripete due volte il menù
switch (scelta)
{ //OPEN switch
case '0': // Exit
printf ("\n\t\tIl programmatore ti saluta\n");
printf ("\t\tGrazie per la scelta\n\n");
break;
case '1': // Inserisci contatto
printf ("\nNome: ");
scanf ("%s", n);
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 -->WORK IN PROGRESS
printf ("\nChi vuoi modificare?\n");
printf ("Nome: ");
scanf ("%s",n);
printf ("Cognome: ");
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
system ("pause");
} //CLOSED main
// Definizione delle funzioni
void InsContatto (char nom[], char cogn[], char tel[], char cit[])
{ //OPEN InsContatto
int i;
if (num_account == ELEM)
printf ("Hai raggiunto il limite di contatti offerto\n\n");
return;
for (i=0; i<=num_account; i++)
if (strcmp (nom,rubrica[i].nome)==0)
if (strcmp (cogn,rubrica[i].cognome)==0)
printf ("Nome e Cognome utente esistono in memoria\n\n");
return;
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++;
} //CLOSED InsContatto
void ModContatto (char nom[], char cogn[], char tel[], char cit[])
//WORK IN PROGRESS
{ //OPEN ModContatto
Cancella (nom,cogn);
InsContatto (nom,cogn,tel,cit);
return;
} //CLOSED ModContatto
void Cancella (char nom[], char cogn[])
{ //OPEN cancella
int i;
Visualizza (nom,cogn);
rubrica[i].nome[0] ='\0';
rubrica[i].cognome[0] ='\0';
rubrica[i].telefono[0] ='\0';
rubrica[i].citta[0] ='\0';
return;
} //CLOSED Cancella
void Visualizza (char nom[], char cogn[])
{ //OPEN Visualizza
int i;
for (i=0; i<=num_account; i++)
if (strcmp (nom,rubrica[i].nome)==0)
if (strcmp (cogn,rubrica[i].cognome)==0)
{
printf ("Il contatto scelto è: \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");
}
else
{
printf ("Il contatto non esiste");
printf ("\n\n");
}
return;
} //CLOSED Visualizza
__________________
PC/HTPC: Mac Mini 3,1 late 2009 | My Book Studio 2TB | LG M237WD monitor/tv | Logitech Z4 | Apple Magic Mouse | Apple Wireless Keyboard | Apple Remote Mobile: Samsung Galaxy Wonder i8150 cm9 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Ci sono diversi errori anche abbastanza gravi direi.
Ad esempio: Codice:
void InsContatto (char nom[], char cogn[], char tel[], char cit[])
{ //OPEN InsContatto
int i;
if (num_account == ELEM)
printf ("Hai raggiunto il limite di contatti offerto\n\n");
return;
for (i=0; i<=num_account; i++)
if (strcmp (nom,rubrica[i].nome)==0)
if (strcmp (cogn,rubrica[i].cognome)==0)
printf ("Nome e Cognome utente esistono in memoria\n\n");
return;
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++;
} //CLOSED InsContatto
In più gli if annidati li potevi sostituire con un singolo if, testando più condizioni alla volta con l'operatore AND (&&). Comincia a correggerti queste (sono ripetute in un po' tutto il programma, cerca e distruggi
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Sep 2008
Città: Messina
Messaggi: 991
|
Ho risolto tutti i miei problemi.
Questo è il codice ora da migliorare. Codice:
/***************************\
***************************
*****Lorenzo Carnevale*****
***** RUBRICA *****
***************************
***************************
Programma per al gestione di una rubrica contatti.
Memorizzare NOME (20caratteri) , COGNOME (20caratteri), NR. di TEL.,
CITTA'(10caratteri).
Utenti massimi [100]
Implementare le seguenti funzioni: - Inserisci contatto
- Modifica Contatto
- Cancella contatto
- Visualizza contatti
*******************************************************************************/
/* RUBRICA V 1.0 */
#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[]);
main()
{ //OPEN main
int scelta; /* 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[15]; /* per inserire il numero di telefono */
int i;
for (;scelta!= 0;)
{ //OPEN for
printf ("\t INDEX\n");
printf ("***************************\n");
printf ("* 1 - Inserisci Contatto *\n");
printf ("* 2 - Modifica Contatto *\n");
printf ("* 3 - Cancella Contatto *\n");
printf ("* 4 - Visualizza Contatto *\n");
printf ("* *\n");
printf ("* 0 - Esci dal programma *\n");
printf ("***************************\n\n");
printf ("Digita: ");
scanf ("%d", &scelta);
switch (scelta)
{ //OPEN switch
case 0: // Exit
printf ("\n\t\tGrazie per la scelta\n\n");
break;
case 1: // Inserisci contatto
printf ("\nNome: ");
scanf ("%s", n);
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
} //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
__________________
PC/HTPC: Mac Mini 3,1 late 2009 | My Book Studio 2TB | LG M237WD monitor/tv | Logitech Z4 | Apple Magic Mouse | Apple Wireless Keyboard | Apple Remote Mobile: Samsung Galaxy Wonder i8150 cm9 Ultima modifica di -hide- : 13-12-2008 alle 15:41. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:24.



















