Login in linguaggio C Problema!!

di il
4 risposte

Login in linguaggio C Problema!!

Ciao a tutti da poco ho iniziato a imparare il linguaggio c e ho scritto il seguente programma e non capisco il perchè del suo malfunzionamento:

#include <stdio.h>
main()
{
      printf("             Login          \n");
      printf("\n");
      printf("\n");
/*Variabili*/
      char un[20];
      char pass[20];
/*Login*/
      printf("   Username: ");
      scanf("%s",&un);
      printf("   Password: ");
      scanf("%s",&pass);
      if(un=="bykram",pass=="esempio"){
      printf("\n");
      printf("   Nome utente e password corretti\n");
      printf("   Accesso consentito\n");
      }
      else{
      printf("\n");
      printf("   Nome utente o password errati\n");
      printf("   Accesso negato");
      }
      fflush(stdin);
      getchar();
      return 0;
}
Il problema è che sia che metto la password o il nome utente sbagliato o giusto mi dice Accesso negato!!
Informazioni utili(forse): per fare il seguente programma ho usato devc++, il programma l'ho salvato in formato c e non da problemi di scrittura dato che se faccio Compila ed Esegui non da nessun errore

4 Risposte

  • Re: Login in linguaggio C Problema!!

    Non si può usare l'operatore == per confrontare due stringhe in c, al suo posto prova strcmp che restituisce n=0 se le due stringhe come parametro sono uguali, altrimenti n<0 se la prima è minore della seconda (in ordine alfabetico) o n>0 se la prima è maggiore della seconda... Inoltre, utilizza l'operatore di and (&&) per unire le due condizioni dell'if, al posto della virgola; l'if risulta:
    if(strcmp(un,"bykram")==0 && strcmp(pass,"esempio")==0)

    che fa svolgere in modo corretto l'esecuzione
  • Re: Login in linguaggio C Problema!!

    Grazie mille con questa funzione il programma fa il suo dovere ma non ho ben capito cosa fa questa funzione e perchè devo dare valore 0 ad entrambe le variabili sapresti spiegarmelo meglio?
    Grazie ancora
  • Re: Login in linguaggio C Problema!!

    Allora la funzione strcmp ha prototipo (un po semplificato)
    int strcmp(char[],char[]);
    il che significa che prende in ingresso il puntatore alla prima locazione di memoria di due array di char... e restituisce un intero. Se questo intero vale 0, il caso semplice, vuol dire che le due stringhe sono uguali.
    se la prima stringa > della seconda, restituisce un valore > 0, in caso contrario, <0

    n=strcmp("casa","casa"); n=0;
    m=strcmp("bianchi","rossi"); m<0;
    p=strcmp("zaino","cavallo"); p>0;

    per informazioni più dettagliate (in inglese però) prova http://www.cplusplus.com/reference/cstring/strcmp

    ps: nel c++ con l'introduzione del tipo string si può usare l'operatore == per il confronto di due stringhe
  • Re: Login in linguaggio C Problema!!

    Ok grazie mille
Devi accedere o registrarti per scrivere nel forum
4 risposte