Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    33

    [C] Mancata lettura vettore stringhe

    Ciao a tutti!
    Devo creare una funzione per la gestione dei cani in un canile mediante struttura albero binario. Questa funzione deve visitare l'albero, controllare la razza dei cani presenti ed inserire in un vettore di stringhe l'elenco delle razze presenti, con la condizione che, se la razza è già presente il cane non deve essere inserito. La funzione deve restituire in numero di razze totale.
    Ho un problema con l'inserimento delle razze all'interno del vettore di stringhe. Per chiarezza riporto prima il codice a cui faccio riferimento :

    La funzione è questa :
    codice:
    int crea_elenco_razze(TTree tree, char elenco[][MAXCHAR]){
       bool ris;
       int n=0,l=0,r=0;
       if(tree!=NULL){
          l=crea_elenco_razze(tree->left,elenco);
          ris=verifica_presenza_cane(elenco,tree->info.satellite.razza);
          if(ris==true){
            inserisci_razza(elenco,tree->info.satellite.razza);
            printf("LUNGHEZZA %d RAZZA : %s\n", strlen(elenco[0]),elenco[0]);
            n=1;
            }
          r=crea_elenco_razze(tree->right,elenco);
          }
       return n+l+r;
       }
    e le funzioni a cui faccio riferimento sono queste :

    codice:
    void inizializza_elenco(char elenco[][MAXCHAR]){
       int i;
       for(i=0;i<MAXCHAR;i++)
          elenco[0][i]='\0';
       }
    
    bool verifica_presenza_cane(char elenco[][MAXCHAR], char razza[]){
       int i=0;
       bool flag=true;
       while(i<MAXCHAR && elenco[0][i]!='\0' && flag==true){
          if(strcmp(elenco[i],razza)==0)
             flag=false;
          i++;
          }
       return flag;
       }
    
    void inserisci_razza(char elenco[][MAXCHAR], char razza[]){
       int i=0;
       while(elenco[0][i]=='\0'){
          i++;
          }
       strcpy(elenco[i],razza);
       printf("INSERITO ? %s\n", elenco[i]);
       }
    Il mio problema sta nel fatto che la funzione "inserisci razza" inserisce effettivamente la razza, come mi conferma la printf con scritto "Inserito ?" mentre una volta tornato alla funzione principale (crea elenco razze) ed effettuando di nuovo la stampa (la seconda print con "LUNGHEZZA" e "RAZZA") mi esce che il cane non è stato inserito. Infatti la lunghezza della stringa mi da 0 e la funzione non stampa alcuna razza. Qualcuno mi può aiutare a trovare l'errore ?

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    Ciao

    Prima di trovare il problema , ci sono cose che non capisco , potresti spiegarle ???

    Il parametro TTree tree , non dovrebbe essere un puntatote ?

    nella funzione inserisci_razza
    while(elenco[0][i]=='\0'){
    i++;
    }
    strcpy(elenco[i],razza);
    qui la variabile i ha il valore della lunghezza della della prima stringa della matrice

    quindi se la lunghezza della prima stringa fosse 15

    tu salvi razza nella 16 riga della matrice !?

    secondo me volevi mettere [riga i ][carattere 0]
    while(elenco[i][0]=='\0'){
    i++;
    }

    stesso problema degli indici ripetuto in tutte le funzioni !

    Se vuoi spiegare un po , cosi magari si trova anche l'errore
    Tecnologia

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    33
    Perchè il parametro TTree dovrebbe essere un puntatore ?
    Cmq ho risolto ! avevo invertito gli indici dell'array e in inserisci razza va scritto !='\0'

  4. #4
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Cmq ho risolto ! avevo invertito gli indici dell'array
    se scrivi tree->info , tree è un puntatore !
    è quello che ti ho detto io , non so se mi sono spiegato cosi male
    Tecnologia

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 © 2025 vBulletin Solutions, Inc. All rights reserved.