Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Rubrica in C

  1. #1

    Rubrica in C

    Sto facendo in C un programma che fa da rubrica telefonica. Ho dei problemi nell'inserimento dei dati, che me li inserisce in modo sbagliato.
    Ecco il codice:
    codice:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    #define dmax 100
    
    typedef char stringa[dmax];
    
    //funzioni
    void Inserisci_nuovo(stringa *nome, stringa *cognome, stringa *numero, int *dim);
    void Cancella_nom(stringa *nome, stringa *cognome,stringa *numero,int *dim);
    void Modifica_num(stringa *nome, stringa *cognome, stringa *numero,int dim);
    void Visualizza_num(stringa *nome, stringa *cognome,stringa *numero,int dim);
    void Visualizza_ALPHA(stringa *nome, stringa *cognome, stringa *numero, int dim);
    void SeqSel(stringa *nome,stringa *cognome, stringa *numero,int N);
    int Ricerca(stringa nomes,stringa cognomes,int dim,stringa *nome,stringa *cognome);
    
    
    int main(){
        int scelta,dim=0;
        stringa nome[dmax],cognome[dmax],numero[dmax];
        while(scelta!=0){
                         system("cls");
                         printf("\t\t\t ***** RUBRICA TELEFONICA *****\n");
                         printf("\n 1. Inserimento nuovo nominativo e telefono\n");
                         printf(" 2. Cancellazione nominativo\n");
                         printf(" 3. Modifica numero di telefono\n");
                         printf(" 4. Visualizza numero di telefono di un nominativo\n");
                         printf(" 5. Visualizzazione rubrica per lettera iniziale del cognome\n");
                         printf(" 0. Premi 0 per uscire\n");
                         printf("\n\t\t\t Scelta: ");
                         scanf("%d",&scelta);
                         if(scelta==1){
                              system("cls");
                              fflush(stdin);
                              Inserisci_nuovo(nome,cognome,numero,&dim);
                         }
                         else if(scelta==2){
                              system("cls");
                              fflush(stdin);
                              Cancella_nom(nome,cognome,numero,&dim);
                         }
                         else if(scelta==3){
                              system("cls");
                              fflush(stdin);
                              Modifica_num(nome,cognome,numero,dim);
                         }
                         else if(scelta==4){
                              system("cls");
                              fflush(stdin);
                              Visualizza_num(nome,cognome,numero,dim);
                         }
                         else if(scelta==5){
                              system("cls");
                              fflush(stdin);
                              Visualizza_ALPHA(nome,cognome,numero,dim);
                         }
        }
    }
    
    void Inserisci_nuovo(stringa *nome, stringa *cognome, stringa *numero, int *dim){
         int i=(*(dim));
         printf("\t\t\t Inserimento nuovo contatto\n");
         printf("\n Inserisci il nome: ");
         gets(nome[i]);
         printf(" Inserisci il cognome: ");
         gets(cognome[i]);
         printf(" Inserisci il numero di telefono: ");
         gets(numero[i]);
         (*(dim))++;
         SeqSel(nome,cognome,numero,(*dim));
         getch();
    }
    
    void SeqSel(stringa *nome,stringa *cognome,stringa *numero,int N){
         int imin,i,j;
         stringa sc;
         for(i=0;i<N-1;i++){
                            imin=i;
                            for(j=i+1;j<N;j++){
                                               if((strcmp(cognome[j],cognome[imin]))<0)
                                               imin=j;
                            }
                            strcpy(sc,cognome[i]);
                            strcpy(cognome[i],cognome[imin]);
                            strcpy(cognome[imin],sc);
                            strcpy(sc,nome[i]);
                            strcpy(nome[i],nome[imin]);
                            strcpy(nome[imin],sc);
                            strcpy(sc,numero[i]);
                            strcpy(numero[i],numero[imin]);
                            strcpy(numero[imin],sc);
         }
    }
                         
    void Cancella_nom(stringa *nome, stringa *cognome,stringa *numero,int *dim){
         int i;
         stringa nomes,cognomes;
         printf("Inserisci nome e cognome del nominativo che desideri cancellare\n");
         printf("\n Cognome: ");
         gets(cognomes);
         printf(" Nome: ");
         gets(nomes);
         i=Ricerca(nomes,cognomes,(*(dim)),nome,cognome);
         if(i==-1) printf("\n\t\t\t NOME DA CANCELLARE NON TROVATO!!!");
         else{
              for(;i<(*(dim));i++){
                              strcpy(nome[i],nome[i+1]);
                              strcpy(cognome[i],cognome[i+1]);
                              strcpy(numero[i],numero[i+1]);
              }
              printf("\t\t\tOK\n");
         }
         getch();
    }
    
    int Ricerca(stringa nomes,stringa cognomes,int dim,stringa *nome,stringa *cognome){
             int i;
             for(i=0;i<dim && (strcmp(nomes,nome[i])!=0) && (strcmp(cognomes,cognome[i])!=0);i++);
             if(i==dim) return -1;
             return i;
    }
    
    void Modifica_num(stringa *nome, stringa *cognome, stringa *numero,int dim){
         stringa nomes,cognomes,numeros;
         int i;
         printf("Modifica numero di telefono\n");
         printf("\nInserisci il nome\n");
         gets(nomes);
         printf("\nInserisci il cognome\n");
         gets(cognomes);
         i=Ricerca(nomes,cognomes,dim,nome,cognome);
         if(i==-1) printf("\n\t\t\t CONTATTO NON TROVATO");
         else{
              printf("Inserisci il nuovo numero: ");
              gets(numeros);
              strcpy(numero[i],numeros);
         }
         getch();
    }
    
    void Visualizza_num(stringa *nome, stringa *cognome,stringa *numero,int dim){
         stringa nomes,cognomes;
         int i;
         printf("Modifica numero di telefono\n");
         printf("\nInserisci il nome\n");
         gets(nome);
         printf("\nInserisci il cognome\n");
         gets(cognome);
         i=Ricerca(nomes,cognomes,dim,nome,cognome);
         if(i==-1) printf("\n\t\t\t CONTATTO NON TROVATO");
         else{
              printf("Il numero e': ");
              puts(numero[i]);
         }
         getch();
    }
    
    void Visualizza_ALPHA(stringa *nome, stringa *cognome, stringa *numero, int dim){
         int i=0;
         char iniziale;
         printf("Inserisci l'iniziale della pagina che desideri visualizzare\n");
         scanf("%c",&iniziale);
         while(i<dim && cognome[i][0]==iniziale){
                     puts(cognome[i]);
                     puts(nome[i]);
                     puts(numero[i]);
         }
         getch();
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Ma a dire il vero è strano che il compilatore non ti segnali alcun errore, al di là dell'esecuzione...

    Tu hai definito questo tipo:

    typedef char stringa[dmax];

    e poi dichiari (in main()) queste variabili:

    stringa nome[dmax],cognome[dmax],numero[dmax];

    ma così facendo in sostanza stai dicendo che nome, cognome e numero sono "array" di stringhe, cioè in sostanza sono matrici di caratteri visto che già di per sé il tipo stringa è un array di caratteri...

    direi che forse quello che volevi fare fosse questo

    stringa nome,cognome,numero;

    EDIT: oppure, se volevi dichiarare effettivamente delle matrici, devi fare attenzione agli argomenti che passi alle gets() nelle funzioni che richiami... scrivere

    gets(nome)

    non è corretto.
    every day above ground is a good one

  3. #3
    Quello che ho fatto lo fatto intenzionalmente(dichiarare in quel modo una lista di stringhe), comunque riesci ad aiutarmi per il mio problema?

  4. #4
    Ho risolto, potete anche chiudere...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.