Cicli annidati

di il
9 risposte

Cicli annidati

Ciao ragazzi stavo implementando un programma che mi chiede di inserire una password e la confronti con la password da me inizializzata... comunque ho creato due for annidati. Se inserisco la password corretta il ciclo si chiude perchè ho inserito un break; il problema sta nel fatto che il break chiude solo quel ciclo e mi richiede di inserire la password... io vorrei chiudere sia quel ciclo che quello esterno! non trovo una soluzione..

9 Risposte

  • Re: Cicli annidati

    La cosa migliore è utilizzare una flag (uscita) che alla partenza vale false; quando vuoi uscire dall'interno la setti a true; ogni ciclo deve testare la flag per eventualmente eseguire un break.
    In alternativa, ma i puristi storceranno il naso, puoi utilizzare un goto ad una label fuori dal ciclo (il goto è brutto ma in questo caso risulta molto leggibile secondo me).
  • Re: Cicli annidati

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(){
        char s[7]="ciao";
        char s1[30];
       int i;
       int j;
       int dim;
       
       for(i=0;i<3;i++){
           printf("inserisci password");
           fgets(s1,30,stdin);
           strtok(s1,"\n");
           for(j=0;s1[j]!='\0';j++){
               if(strcmp(s1,s)==0){
                   
                   printf("password corretta");
           break;
        
    
               } else {
                   
                   printf("accesso negato");
                break;
                   
                   
                   
               }
               
              
           }
        
    
       }
       
        
    }
    grazie e dove inserisco il goto in questo codice ?
  • Re: Cicli annidati

    Prova con la flag, seguendo questo schema:
    
    uscita = 0;
    for(a)
    {
    	for(b)
    	{
    		if(condizione di uscita)
    		{
    			uscita = 1;
    			break;
    		}
    	}
    	
    	if(uscita)
    		break;
    }
  • Re: Cicli annidati

    Partiamo dall'inizio ... a che ti serve il ciclo interno (il for con j) ???

    Mi sa che stai facendo qualcosa che non serve affatto !
  • Re: Cicli annidati

    Perche' non serve?
  • Re: Cicli annidati

    Dimmi tu a cosa serve ...

    Il primo for serve a dare 3 tentativi, il confronto lo fai con la strcmp. Quindi il secondo for a che serve?
  • Re: Cicli annidati

    Vero hai ragione non serve ,è superfluo! grazie sempre delle dritte ,mi state aiutando tantissimo!
  • Re: Cicli annidati

    Mi pare di avertelo già detto in un altro thread ... le dritte vanno bene ma devi ricordartele ...
  • Re: Cicli annidati

    Oltre agli ottimi consigli di @oregon, va ricordato che l'unico metodo elegante per uscire da un ciclo molto annidato è il tanto contestato goto, oltre questo uso è possibile usarlo nella gestione degli errori e in qualche altra rara occasione dove è impossibile ottimizzare diversamente. In tutti gli altri casi è bandito
Devi accedere o registrarti per scrivere nel forum
9 risposte