Oppure

Loading
30/11/09 15:48
Mahat89
Ciao a tutti, devo creare una rubrica molto semplice in C (nel senso che non deve usare puntatori o i files). E' finita, il compilatore (dev c++) compila senza errori o warning, ma quando la lancio e scelgo di aggiungere un contatto mi si chiude e mi appare la segnalazione errori di windows. La funzione visualizza contatti pare funzionare ( anche se non posso testare piu' di tanto visto che non posso aggiungere i contatti )
Premetto che è finita, ma non completa, cioè dovrebbe funzionare ma devo ancora migliorare gli spazi, gli " a capo", alcune condizioni di uscita...però prima di passare a questi "dettagli" volevo vedere almeno qualche risultato... se poteste darci un'occhiata ne sarei molto felice...ripeto, è molto semplice, alla fine usa solo funzioni/procedure e cicli, nient'altro..:yup:
ecco il link mahat.altervista.org/…
aaa
30/11/09 19:09
giuseppe93
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
const int MaxContatti=100;

/*definisco dei vettori di caratteri che serviranno per inserire il nome e il cognome nella struct*/
typedef char strin15[16];
typedef char strin10[11];


typedef struct TContatto
{
        strin15 Nome;
        strin15 Cognome;
        strin10 Telefono;
} Tcontatto;

/*defifinizione di un vettore di struct*/
typedef TContatto VettoreContatti[MaxContatti];

/*definizione dei prototipi delle procedure*/
void Inizializza(int i,VettoreContatti Rubrica);
void VisualizzaRubrica(int i, VettoreContatti Rubrica);
void AggiungiContatto(int i, char scelta, VettoreContatti Rubrica);
void RimuoviContatto(int i, VettoreContatti Rubrica);

/*programma principale*/
int main()
{
     VettoreContatti Rubrica; /* variabile per accedere all'array di struct */
     int i,scelta;
          Inizializza(i, Rubrica); /* Pulisce i campi " nome, cognome telefono " */
          printf (" #######################\n");
          printf (" #        RUBRICA      #\n");
          printf (" #######################\n\n");
          printf (" 0) ESCI\n\n");
          printf (" 1) VISUALIZZA RUBRICA\n\n");
          printf (" 2) AGGIUNGI CONTATTO\n\n");
          printf (" 3) RIMUOVI CONTATTO\n\n");
         
          printf (" la tua scelta > ");
          scanf ("%d", &scelta);
                    
                 if (scelta==0) 
                 {
                         return 0;
                         }
                 
                 else if (scelta==1)
                 {
                      VisualizzaRubrica(i, Rubrica);
                      }
                 else if (scelta==2)
                 {
                      AggiungiContatto(i,scelta,Rubrica);
                      
                      }
                 else if (scelta==3)
                 {
                      RimuoviContatto(i,Rubrica);
                      }
                        
}
/*pulisce Nome, Cognome e Telefono*/                 
void Inizializza(int i, VettoreContatti Rubrica)
{
     
     for(i=0; i<MaxContatti; i++)
     {
              strcpy(Rubrica[i].Nome," ");
              strcpy(Rubrica[i].Cognome," ");
              strcpy(Rubrica[i].Telefono," ");
     }
};


/*Stampa a video i contatti*/
void VisualizzaRubrica(int i, VettoreContatti Rubrica)
{ 
   for(i=0; i<MaxContatti;i++)
    { 
            printf("Dati del %d utente: \n",i+1);
            printf("Nome: %s\n", Rubrica[i].Nome);
            printf("Cognome: %s\n", Rubrica[i].Cognome);
            printf("Telefono: %s\n", Rubrica[i].Telefono);
    system("PAUSE");
    }
 }  

/*Inserisce contatto (nome,cognome,telefono  nella struttura*/
void AggiungiContatto(int i, char scelta, VettoreContatti Rubrica)
{
       
      do {
            printf("inserisci il nome: ");
            gets(Rubrica[i].Nome);
            printf("Inserisci il cognome: ");
            gets(Rubrica[i].Cognome);
            printf("Inserisci il numero di telefono");
            scanf("%sRubrica.Telefono"); 
            i++;
            
          
          }while (i<MaxContatti);

}

/*Dati nome e cognome trova il contatto e lo cancella, lasciando lo "spazio" */
void RimuoviContatto(int i,  VettoreContatti Rubrica)
{
     char nome[16],cognome[16];
     bool trovato=false;
     for (i=0;i<MaxContatti;i++)
     {
     if ((Rubrica[i].Nome == nome) && (Rubrica[i].Cognome == cognome))
     { 
              strcpy(Rubrica[i].Nome," ");
              strcpy(Rubrica[i].Cognome," ");
              strcpy(Rubrica[i].Telefono," ");
          trovato=true;
              }
     else if (!trovato)
     {
          printf("Il contatto non esiste");
          }
     }
}



non capisco che valore passi per i in ogni funzione dal momento che i non è inizializzata:noway:
aaa
30/11/09 19:36
HeDo

eh si perchè tu puoi comparare le stringhe in quel modo...

aaa
30/11/09 21:18
ingMark
proprio come dice hedo non puoi comparare le stringhe come faresti per int o char.
devi usare strcmp(rubrica[i].nome, nome).
Se la funzione restituisce 0 allora le due stringhe sono uguali :k:
aaa
30/11/09 22:11
Lawliet
Postato originariamente da Mahat89:

typedef struct TContatto
{
        strin15 Nome;
        strin15 Cognome;
        strin10 Telefono;
} Tcontatto;

/*defifinizione di un vettore di struct*/
typedef TContatto VettoreContatti[MaxContatti]; 


Mi chiedo come faccia a funzionarti sto pezzo di codice.


typedef struct
{
        strin15 Nome;
        strin15 Cognome;
        strin10 Telefono;
} Tcontatto;

/*defifinizione di un vettore di struct*/
TContatto VettoreContatti[MaxContatti]; 

Lo sistemerei in così al massimo.
Ultima modifica effettuata da Lawliet 30/11/09 22:17
aaa