Numero tentativi password

di il
12 risposte

Numero tentativi password

Salve, ho appena iniziato a studiare il C, ma avendo già esperienza in Python ho provato a portarmi avanti scrivend questo codice:
passInput(){
	
	int id = 2510;
	int tentativi = 3;
	int password = 12345;
	int passinput;

	printf("Inserire la password: ");
		scanf("%d", &passinput);
		
		if (passinput == password){
			printf("Benvenuto, %d", id);
			
		}
		else{
			tentativi -= 1;
			printf("Password Errata! Ritentare! Tentativi rimasti: %d \n", tentativi);
			passInput();
		}


}
Ovviamente, ogni volta che verrà eseguito passInput() i tentativi ritorneranno 3 e ogni volta mi dirà "Tentativi rimasti : 2". Quello che voglio è che quando verrà rieseguito passInput() i tentativi iniziali siano 2 e non 3.
Spero di essermi fatto capire, grazie in anticipo.

12 Risposte

  • Re: Numero tentativi password

    No, non ti sei spiegato
  • Re: Numero tentativi password

    oregon ha scritto:


    No, non ti sei spiegato
    quello che intendo dire è che quando eseguo passInput() e sbaglio la password i tentativi saranno uguali a -1, quindi 2. Però, quando verrà riletto passInput() i tentativi ritorneranno 3, non 2 (tentativi -= 1). Capito?
  • Re: Numero tentativi password

    Perché non proponi la versione in python? secondo me, per come é impostato, non ha senso neanche in python, ma magari c'é qualche caratteristica che non hai potuto portare in C.
    comunque, a prescindere, non ha senso richiamare ricorsivamente la funzione, meglio un semplice ciclo!
  • Re: Numero tentativi password

    Infatti la chiamata ricorsiva non ha senso e comunque non ho ancora capito il problema
  • Re: Numero tentativi password

    Se vuoi richiamarla ricorsivamente devi darle in input il numero di tentativi, così:
    passInput(int t);
    E dentro metti
    int tentativi = t;
    Così la prima volta la chiami con passInput(3) e ogni volta la richiami al suo interno con passInput(tentativi-1), oppure elimini proprio la variabile tentativi e usi solo t dell'input che è uguale
  • Re: Numero tentativi password

    Chi è all'inizio non sa cosa sia una chiamata ricorsiva. La scambia con un goto...
  • Re: Numero tentativi password

    Si ma casualmente l'ha fatto lo stesso quindi se vuole farlo così, io gli ho detto come
  • Re: Numero tentativi password

    D'accordo, hai fatto bene, ma quello che ti volevo dire è un'altra cosa.

    Lui non sa nulla della ricorsività e non è questo il caso di usarla. Quindi gli va detto.
  • Re: Numero tentativi password

    In python si potrebbe scrivere una funzione ricorsiva senza passare il parametro, utilizzando un attributo, come in:
    def passinput():
        passinput.tentativi = getattr(passinput, 'tentativi', 3) 
        print("tentativi rimasti "+str(passinput.tentativi))
        if(passinput.tentativi<1):
            print("spiacente!")
        else:
            passinput.tentativi=passinput.tentativi-1
            passinput()
    
    if __name__ == "__main__":
        passinput()
    So che è una porcheria ma visto che l'OP dice di conoscere Python e di voler passare a C sarebbe interessante che ci spieghi (come già chiedevo) come avrebbe scritto in Python
  • Re: Numero tentativi password

    Prova ad usare i cicli tipo il for!!
    
    
    passInput(){
       
       int id = 2510;
       int tentativi = 3,i;
       int password = 12345;
       int passinput;
    
       printf("Inserire la password: ");
          scanf("%d", &passinput);
          
          if (passinput == password){
             printf("Benvenuto, %d", id);
           
             for(int i=3; i>0; i--){  //uso il for per la ricorsione
             if (passinput != password){
             printf("Password Errata! Ritentare! Tentativi rimasti: %d \n", i);
            scanf(" %d", &passinput);
            }
       }
    
    
    }
    
    
  • Re: Numero tentativi password

    @AmedeoF ma hai letto il codice che hai scritto?
  • Re: Numero tentativi password

    Hai ragione @candaluar correggo il mio codice con il seguente
    
    
    #include <iostream>
    #include <stdio.h>
    #include <cstdlib>
    
    void Pass(int password,int passinput,int *tentativi){
        
        do{
            printf("\nPass errata!Ridigita! Tentativi rimasti %d; " ,*tentativi);
            scanf("%d",&passinput);
            (*tentativi)--;
        }while(passinput!=password);
        if(passinput==password){
            printf("Benvenuto!!");
        }
    }
    
    int main(int argc, char **argv)
    {
        int password=12345,passinput,tentativi=3;
        printf("Inserisci password: ");
        scanf("%d",&passinput);
        
        Pass(password,passinput,&tentativi);
        
    	return 0;
    }
    
    
    Senza PUNTATORI sarebbe;
    
    #include <iostream>
    #include <stdio.h>
    #include <cstdlib>
    
    void Pass(int password,int passinput,int tentativi){
        
        do{
            printf("\nPass errata!Ridigita! Tentativi rimasti %d; " ,tentativi);
            scanf("%d",&passinput);
            tentativi--;
        }while(passinput!=password);
        if(passinput==password){
            printf("Benvenuto!!");
        }
    }
    
    int main(int argc, char **argv)
    {
        int password=12345,passinput,tentativi=3;
        printf("Inserisci password: ");
        scanf("%d",&passinput);
        
        Pass(password,passinput,tentativi);
        
    	return 0;
    }
    
    
Devi accedere o registrarti per scrivere nel forum
12 risposte