AIUTO!problema con un programma non funziona

di il
5 risposte

AIUTO!problema con un programma non funziona

Non riesco a risolvere gli errori di questo programma. purtroppo le mie conoscienze sono un pò scarse. se qualcuno di voi mi può aiutare gli sarei molto grato.
in modo più specifico il programma mi da errori sul passaggio dei valori alle funzioni. grazie
#include<stdio.h>
#include<string.h>

void aggiungi (struct rubrica a[]);
int ricerca (char r,struct rubrica a[]);
void modifica (char r,struct rubrica a[]);
void elimina (char r,struct rubrica a[]);

struct rubrica
{
       char nome[20];
       char cognome[20];
       char numero[20];
}a[100];
int i,j,d,d2,x,n=0,s;
char ac[20],pno[20],an[20],r[20];

main()
{
      do{
      printf("MENU\n\n");
      printf("1-Aggiungi nuova sheda\n");
      printf("2-Cerca scheda\n");
      printf("3-Modifica scheda\n");
      printf("4-Elimana scheda\n");
      printf("5-Esci\n");
      printf("\nSelezionare l'operazione desiderata\n");
      scanf("%d",&d);
      if(d==1)
      {
              aggiungi (rubrica a[n]);
      }
      if(d==2)
      {
              printf("Inserire cognome da ricercare\n");
              scanf("%s",&r);
              s=ricerca(r);
              printf("Numero:%s\n",a[s].numero);
      }
      if(d==3)
      {
              printf("Inserire cognome da modificare\n");
              scanf("%s",&r);
              modifica (r);
      }
      if(d==4)
      {
              printf("Inserire il cognome della scheda da eliminare\n");
              scanf("%s",&r);
              elimina (r);
      }
      }while(d!=5);
      
      getchar();
      getchar();
}

void aggiungi ()
{
     printf("Inserire nome\n");
     scanf("%s",&a[n].nome);
     printf("Inserire cognome\n");
     scanf("%s",&a[n].cognome);
     printf("Inserire numero\n");
     scanf("%s",&a[n].numero);
     for(i=0;i<n-1;i++)
     {
                       for(j=0;j<n;j++)
                       {
                                       if(strcmp(a[i].cognome,a[j].cognome)<0)
                                       {
                                                   strcpy(a[i].cognome,ac);
                                                   strcpy(a[j].cognome,a[i].cognome);
                                                   strcpy(ac,a[j].cognome);
                                                   strcpy(a[i].nome,pno);
                                                   strcpy(a[j].nome,a[i].nome);
                                                   strcpy(pno,a[j].cognome);
                                                   strcpy(a[i].numero,an);
                                                   strcpy(a[j].numero,a[i].numero);
                                                   strcpy(an,a[j].numero);                                                                                                                        
                                       }
                       }
     }
     n++;
}

int ricerca (char r)
{
    for(i=0;i<n;i++)
    {
                    x=strcmp(r,a[i].cognome);
                    if(x==0)
                    {
                            s=i;
                    }
    }
    return s;
}

void modifica (char r)
{
     for(i=0;i<n || x!=0;i++)
     {
                 x=strcmp(r,a[i].cognome);
                 if(x==0)
                 {
                         printf("Cosa vuoi modificare?\n");
                         printf("1-Cognome\n");
                         printf("2-Nome\n");
                         printf("3-Numero\n");
                         printf("\nEsprimere la decisione\n");
                         scanf("%d",&d2);
                         if(d2==1)
                         {
                                  printf("Inserire nuovo cognome\n");
                                  scanf("%s",&a[i].cognome);
                                  for(i=0;i<n-1;i++)
                                  {
                                                    for(j=0;j<n;j++)
                                                    {
                                                                    if(strcmp (a[i].cognome,a[j].cognome)<0)
                                                                    {
                                                                              strcpy(a[i].cognome,ac);
                                                                              strcpy(a[j].cognome,a[i].cognome);
                                                                              strcpy(ac,a[j].cognome);
                                                                              strcpy(a[i].nome,pno);
                                                                              strcpy(a[j].nome,a[i].nome);
                                                                              strcpy(pno,a[j].cognome);
                                                                              strcpy(a[i].numero,an);
                                                                              strcpy(a[j].numero,a[i].numero);
                                                                              strcpy(an,a[j].numero);                                                                                                                        
                                                                    }
                                                    }
                                  }
                         }
                         if(d2==2)
                         {
                                  printf("Inserire nuovo nome\n");
                                  scanf("%s",&a[i].nome);
                         }
                         if(d2==3)
                         {
                                  printf("Inserire nuovo numero\n");
                                  scanf("%s",&a[i].numero);
                         }
                 }
     }
}     

void elimina (char r)
{
     for(i=0;i<n;i++)
     {
                     x=strcmp(r,a[i].cognome);
                     if(x==0)
                     {
                             for(j=i;j<n;j++)
                             {
                                             strcpy(a[j].cognome,ac);
                                             strcpy(a[j+1].cognome,a[j].cognome);
                                             strcpy(ac,a[j+1].cognome);
                                             strcpy(a[j].nome,pno);
                                             strcpy(a[j+1].nome,a[j].nome);
                                             strcpy(pno,a[j+1].cognome);
                                             strcpy(a[j].numero,an);
                                             strcpy(a[j+1].numero,a[j].numero);
                                             strcpy(an,a[j+1].numero);
                             }
                     }
     }  
}    
      

5 Risposte

  • Re: AIUTO!problema con un programma non funziona

    Cosa non capisci dagli errori che ti vengono proposti da correggere.
    Formatta il tuo codice così si capisce meglio:
    dal regolamento:
    
    4. Formattare il codice sorgente
    Visto gli argomenti trattati in questo forum vengono spesso inseriti stralci di codice sorgente.
    Per rendere facilmente leggibile tale codice bisogna formattarlo utilizzando il pulsante "Code".
    
  • Re: AIUTO!problema con un programma non funziona

    Primo errore (di compilazione):
    
          if(d==1)
            {
                  aggiungi (rubrica a[n]);
            }
    
    Il codice giusto è:
    
          if(d==1)
            {
                  aggiungi (a);
            }
    
    Michele

    PS: posta anche l'output del compilatore, così è più facile individuare gli errori.
  • Re: AIUTO!problema con un programma non funziona

    Secondo(i) errore(i):
    
          if(d==2)
          {
                  printf("Inserire cognome da ricercare\n");
                  scanf("%s",&r);
                  s=ricerca(r);
                  printf("Numero:%s\n",a[s].numero);
          }
    
    La funzione "ricerca" richiede 2 parametri: il soggetto da cercare e il vettore dei contatti, come da dichiarazione:
    int ricerca (char r,struct rubrica a[]);
    Inoltre la variabile 'r' non è una stringa (vettore di caratteri) ma un carattere singolo. Codice corretto potrebbe essere:
    
    int ricerca (char r[color=#40BF00][][/color],struct rubrica a[]);
    ...
          if(d==2)
          {
                  printf("Inserire cognome da ricercare\n");
                  scanf("%s",&r);
                  s=ricerca(r[color=#40BF00],a[/color]);
                  printf("Numero:%s\n",a[s].numero);
          }
    
    
    Vediamo se con queste indicazioni, riesci a correggere il resto da solo...

    Michele
  • Re: AIUTO!problema con un programma non funziona

    Finalmente sono riuscito a farlo funzionare come volevo io...grazie milla x il vostro aiuto...erano degli errori proprio stupidi...grazie mille
  • Re: AIUTO!problema con un programma non funziona

    Alcuni erano errori tipici del principiante, altri invece sono errori che ci si porta dietro per tutta la vita (almeno per quanto mi riguarda).
    Il programmatore esperto non è quello che scrive programmi senza errori, ma quello che riesce ad identificarli e correggerli velocemente
Devi accedere o registrarti per scrivere nel forum
5 risposte