|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Mar 2009
Messaggi: 28
|
[C] - programma registrazione utente
ciao a tutti ^^
sto facendo un programma dove dò la possibilità all'utente di registrarsi o accedere. per ora ho buttato giù queste righe,ma la funziona accedi non va Codice:
#include <stdio.h>
#include <stdlib.h>
void accedi();
void registrati();
int main()
{
char scelta;
while (1) {
printf("Scegli una delle seguenti opzioni\n");
printf("[1] - Accedi\n");
printf("[2] - Registrati\n");
printf("[3] - Esci\n");
scanf("%c", &scelta);
while(getchar() != '\n');
switch (scelta){
case '1':
accedi();
exit(0);
case '2':
registrati();
exit(0);
case '3':
exit(0);
default:
printf("\aOPZIONE NON VALIDA\n");
}
}
return 0;
}
void accedi()
{
FILE * fp;
char username[20],password[20],Cuser[20],Cpass[20],str[50];
printf("USERNAME: ");
gets(username);
printf("PASSWORD: ");
gets(password);
while(!feof(fp)){
fscanf(fp,"%s %s",Cuser,Cpass);
if((strcmp(Cuser,username)==0) && (strcmp(Cpass,password)==0)){
printf("BENVENUTO %s",Cuser);
}
else{
printf("\aERRORE,UTENTE NON REGISTRATO");
main();
}
}
}
void registrati()
{
char username[20];
char password[20];
FILE * fp;
fp = fopen("db_utenti.txt", "a");
printf("USERNAME: ");
gets(username);
fputs(username,fp);
fputs(" ",fp);
printf("PASSWORD: ");
gets(password);
fputs(password,fp);
fputs("\n", fp);
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
|
Nella funzione accedi() ti sei dimenticato di aprire il file:
Codice:
fp = fopen("db_utenti.txt", "r");
Codice:
break; Inoltre è buona norma chiudere il puntatore al file, con una fclose, dopo averlo utilizzato.
__________________
Il sole è giallo |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Mar 2009
Messaggi: 28
|
che imbecille che sono....non so perchè non ho aperto il canale...xD
invece del break; avevo messo exit(0),va bene lo stesso? |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
|
Dove li hai messi tu vanno pure bene (dipende: se vuoi terminare l'esecuzione del programma dopo la stampa del messaggio, vanno bene), ma devi comunque forzare l'uscita nel while di accedi() (appunto con un "break;"), subito dopo la printf di benvenuto.
__________________
Il sole è giallo |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Mar 2009
Messaggi: 28
|
ok ho fatto ma non funziona...da sempre errore,funziona solo se inserisci i dati del primo utente della lista
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
|
Non funziona perchè è sbagliata la gestione della stampa dei messaggi nel while e la chiamata al main() nell'else: praticamente, appena vai nel ramo else, richiami il main uscendo quindi dal while, anche se non sei a fine file.
Ti incollo una possibile versione, che tra l'altro utilizza un flag (trovato) al posto del break, che personalmente odio come la morte. Codice:
int trovato=0;
while(!feof(fp) && !trovato)
{
fscanf(fp,"%s %s\n",Cuser,Cpass);
if((strcmp(Cuser,username)==0) && (strcmp(Cpass,password)==0))
{
trovato=1;
}
}
if (trovato)
printf("BENVENUTO %s",Cuser);
else
{
printf("\aERRORE,UTENTE NON REGISTRATO");
main();
}
__________________
Il sole è giallo |
|
|
|
|
|
#7 |
|
Junior Member
Iscritto dal: Mar 2009
Messaggi: 28
|
grazie,così sembra funzionare,se avrò altri problemi scriverò qui ^^
PS: perchè lo odi? |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:01.



















