Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Lista ordinata - funzione di ricerca
Forum - C/C++ - Lista ordinata - funzione di ricerca

Avatar
drewnik99 (Normal User)
Pro


Messaggi: 69
Iscritto: 28/03/2008

Segnala al moderatore
Postato alle 17:52
Sabato, 17/09/2011
Ecco il codice:

Codice sorgente - presumibilmente C++

  1. struct comp
  2. {
  3.     int code;
  4.     char name[25];
  5.     char des[100];
  6.     int disp;
  7.     struct comp *n;
  8. };
  9.  
  10. struct comp *comps = 0;
  11. int glob;
  12.  
  13.  
  14. struct comp ***ccompx(const char name[])
  15. {
  16.     struct comp **pv = (struct comp**) malloc(sizeof(struct comp*));
  17.     if(!pv)
  18.     {
  19.         puts("\nRicerca interrotta");
  20.     }
  21.     struct comp ***point;
  22.     struct comp *p = (struct comp*)malloc(sizeof(struct comp));
  23.     if(!p)
  24.     {
  25.         puts("\nRicerca interrotta");
  26.     }
  27.     glob = 0;
  28.     for(p = comps; p; p = p->n)
  29.     {
  30.         if(strstr(p->name, name))
  31.         {
  32.             pv = (struct comp **) realloc(pv, sizeof(struct comp*) * (glob + 1));
  33.             if(!pv)
  34.             {
  35.                 puts("\nRicerca non completata");
  36.                 goto ret;
  37.             }
  38.             point = &pv;
  39.             (*point)[glob] = p;
  40.             glob++;
  41.         }
  42.     }
  43. ret:
  44.     return point;
  45. }
  46.  
  47.  
  48. int main()
  49. {
  50. char name[25];
  51. printf("Inserisci la chiave di ricerca: ");
  52. scanf("%s", &name);
  53. struct comp ***pv = ccompx(name);
  54.             if (pv && *pv && (*pv)[0])
  55.             {
  56.                 int codep;
  57.                 puts("\n1 - Visualizzazione completa");
  58.                 puts("2 - Tabella");
  59.                 puts("3 - Torna al menu'");
  60.                 printf("\nCome si intende visualizzare i componenti: ");
  61.                 fflush(stdin);
  62.                 scanf("%i", &codep);
  63.                 switch(codep)
  64.                 {
  65.                 case 1:
  66.                     for(int i = 0; glob > i++;)
  67.                     {
  68.                         printf("\nCodice del componente:           %i\n", (*pv)[i]->code);
  69.                         printf("Nome del componente:             %s\n", (*pv)[i]->name);
  70.                         printf("Descrizione del componente:      %s\n", (*pv)[i]->des);
  71.                         printf("Disponibilita' del componente:   %i\n\n", (*pv)[i]->disp);
  72.                     }
  73.                     break;
  74.                 case 2:
  75.                     printf("\nCODICE   DISPONIBILITA'   NOME\n\n");
  76.                     for(int i = 0; glob > i++;)
  77.                     {
  78.                         printf("%6d%16d%-99s\n", (*pv)[i]->code, (*pv)[i]->disp, (*pv)[i]->name);
  79.                     }
  80.                 case 3:
  81.                 default:
  82.                     free(pv);
  83.                     return;
  84.                 }
  85.                 free(pv);
  86.             }
  87.             else
  88.             {
  89.                 puts("\nNessun componente trovato");
  90.             }
  91. }



La funzione main non riesce a leggere le strutture individuate dalla funzione compx:
Codice sorgente - presumibilmente C/C++

  1. printf("\nCodice del componente:           %i\n", (*pv)[i]->code);



L'istruzione restituisce errore. Qualche suggerimento?

Ultima modifica effettuata da drewnik99 il 18/09/2011 alle 11:34
PM
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 18:04
Sabato, 17/09/2011
Il codice non è compilabile dato che

name

codep

non sono definite.

Finché il programma non è correttamente compilabile, non è possibile provarlo per capire i problemi ...

Corretto. - drewnik99 - 17/09/11 18:26
Non puoi definire name dopo averlo usato! E senza averne indicato il contenuto! - nessuno - 17/09/11 18:49
Corretto, ma non funziona comunque. - drewnik99 - 18/09/11 11:27
Non ho detto che erano i soli errori ma che erano i più evidenti ... - nessuno - 18/09/11 11:30
E poi, che senso ha fare una ricerca se non hai inserito nulla nella lista? Lo fai prima del menu? Devi riordinare le idee ... - nessuno - 18/09/11 11:35
Si, prima inserisco le informazioni di alcuni componenti e queste vengono inserite in strutture che appartengono ad una lista ordinata e dopo avvio la ricerca. - drewnik99 - 18/09/11 19:03
Ma tu nel codice prima di inserire dati fai una ricerca! Di cosa se non c'è nulla? - nessuno - 18/09/11 19:09


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM