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();
}