Salve a tutti,
ho un vettore di chiamato nt1[] di 50 caratteri. Non è a forza tutto pieno, e può presentare caratteri non ripetuti. Come carattere tappo ho appiccicato alla fine "NULL".

Ora, io devo cercare una lettera dell'alfabeto libera, ovvero che non è presente in quel vettore, e restituirla in uscita da quella funzione, e ho provato a farlo con queste due funzioni ma c'è qualcosa che non va:

codice:
int ricerca_lineare(int nt[], int cercato)
{
    int i=0;
    int ritorno = 0;//in caso di elemento non trovato
    while((nt[i] != cercato) && (nt[i] != NULL))
    {
        i++;            
    }    
    if(nt[i] == cercato)
    {
         ritorno = 1;        
    }
    return ritorno;
}
//funzione per la ricerca di un nt non utilizzato
char trova_nt_libero(char nt1[])
{
     int i,j;
     char ritorno = 'A';
     int return_ricerca = -1;
     i=0;
     while(nt1[i] != NULL)
     {
        do
        {
            ritorno++;
            return_ricerca = ricerca_lineare(nt1,ritorno);         
        }while(return_ricerca == 1);           
        i++;
     }
      nt1[i] = ritorno;
      nt1[i+1] = NULL;
      return ritorno;               
}
La prima è il semplice algoritmo di ricerca lineare, la seconda è la mia funzione vera e propria che semplicemente scandisce il vettore degli nt, quindi finchè non arrivi al carattere tappo "NULL", e partendo dalla lettera "A" effettua la ricerca.

Se trova che quella lettera è presente nel vettore nt1, grazie al do-while, incremente di uno la lettera e continua la ricerca, non fermandosi finchè non trova una lettera non trovata e passando quindi alla posizione successiva.

Le ultime due assegnazioni sono semplicemenente delle funzione che fanno in modo di riaggiornare la lista dei nuovi non terminali ovvero, alla prossima chiamata della funzione non dovrò ne riutilizzare l'attuale lettera usata e ne quella che era stata usata in precedenza.

Quello che non capisco è perchè non va, se nel vettore ho ABC, alla prima chiamata mi da I, poi mi da K, e poi mi da di nuovo K.

Di regola dovrebbe darmi D, poi E, poi F ma sbagierò qualcosa nella logica dell'algoritmo.

Vi ringrazio in anticipo,
Neptune.