Newsgroup: it.comp.lang.c
Titolo: Problemi con una pass.

Ciao a tutti,
ho un piccolo problema con un programma scritto per MS-DOS:
vorrei controllare l'accesso a un programma tramite una password definita
dall'utente.
A questo scopo ho creato un secondo eseguibile che scrive la pass. in un
file.
Quindi nel programma principale chiedo all'utente di immettere la pass. che
viene
salvata in un secondo file. Una volta chiamata la funzione fscanf() e
salvati i dati
in due array, li metto a confronto mediante : if(pass==pass2) e il problema
nasce qui: al momento
del controllo anche se le due stringhe sono perfettamente uguali l' if passa
il controllo
all' else non dandomi cosě accesso al rpogramma.
Premetto che sono un principiante.
Grazie anticipatamente.
Sono gradite risposte anche su 
zazaN...@bis.dada.it
rimuovere dall'indirizzo NOSPAM

 all' else non dandomi cosě accesso al rpogramma.
con pass==pass2 stai confrontando i puntatori, non gli array. Devi fare invece:
    if (!strcmp(pass,pass2))
?manu*

Premetto che sono un principiante.
Ciao, 
non puoi confrontare le stringhe in quel modo.
E' logico che l'if passi il controllo.
In realta' scrivendo "if (pass == pass2) " stai semplicemente confrontando il
valore di due puntatori che evidentemente, se il programma e' scritto bene, sono
distinti.
Le stringhe in C non sono gestite come nel Pascal, cioe' non vale il semplice
confronto tra i loro nomi identificatori ad assicurarne il confronto carattere
per carattere.
Devi utilizzare a questo scopo la funzione "strcmp" che ritorna 0 se le due
stringhe sono uguali, un valore negativo se la prima e' in valori ascii "minore"
della seconda o altrimenti un valore positivo nel caso che la prima sia
"maggiore" della seconda.
In alternativa puoi usare "stricmp" dove la "i" sta per "insensitive", cioe' che
non distingue tra maiuscole e minuscole.
Andrea      
(per le risposte via e-mail togli CHITIHACHIESTONIENTE!!!! dal mio indirizzo)
ICQ# 8328956

Ciao Zaza, mi hai scritto in privato, ti ho risposto ma il tuo indirizzo risulta
inesistente e allora ti rispondo qui :
Ti riscrivo il programma per farti vedere come si usa tutto cio' di cui ti e'
stato parlato :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *getpasswd( void )
{
  FILE *f;
  char buffer[80];
  if ((f = fopen("pass.txt", "rt")) == NULL)
  {
     fprintf(stderr, "impossibile prelevare la password");
     exit(1);
  }
  fscanf(f, "%s", buffer);
  fclose(f);
  return buffer;
}
void area_quadrato( void )
{
  char um[5];
  float lato;
  printf("inserisci l\'unita\' di misura (dm, cm, mm, ...) : ");
  fflush(stdin); gets(um);
  printf("\nmisura del lato %s : ", um);
  fflush(stdin); scanf("%f", &lato);
  printf("\narea : %10.5f\n", (lato*lato));
}
void area_triangolo( void )
{
  char um[5];
  float base, altezza;
  printf("inserisci l\'unita\' di misura (dm, cm, mm, ...) : ");
  fflush(stdin); gets(um);
  printf("\nmisura della base %s : ", um);
  fflush(stdin); scanf("%f", &base);
  printf("\nmisura dell\'altezza %s : ", um);
  fflush(stdin); scanf("%f", &altezza);
  printf("\narea : %10.5f\n", (base*altezza/2));
}
int main( void )
{
  char pass[80], matrice[80];
  int tentativo = 0, ok_pass = 0, num;
  strcpy(matrice, getpasswd());
  while ((tentativo < 3) && (!ok_pass))
  {
      printf("inserisci password "); gets(pass);
      if (!strcmp(pass, matrice))
      {
	 printf("\npassword corretta !\n");
	 ok_pass = 1;
	 break;
      } else {
	 printf("\n\apassword errata !\n\n");
	 ++tentativo;
      }
  }
  if (!ok_pass)
  {
     fprintf(stderr, "\aimpossibile accedere al programma\n");
     exit(1);
  }
  printf("aree\n\n");
  printf("1. quadrato\n");
  printf("2. triangolo\n");
  printf("9. fine\n");
  fflush(stdin); scanf("%d", &num);
  switch (num)
  {
     case 1 : area_quadrato(); break;
     case 2 : area_triangolo(); break;
  }
  printf("\nprogramma terminato.\n");
  return 0;
