View Full Version : [C]password in un prog...
banana snapple
23-03-2007, 17:47
ciao a tutti...ho due piccole domande da farvi::help:
1.nel codice che ho messo sotto per andare avanti devi mettere una password numerica....vorrei mettere dei caratteri invece di numeri....magari meglio ancora se escono degli asterischi per coprire quello che si scrive
2. visto che il programma calcola la media vorrei poter inserire numeri con la virgola..
#include <stdio.h>
#include <process.h>
#define M 8
main()
{
int i, ma, x[M], s, p;
system("CLS");
printf("******************************************************\n");
printf("* Produced by MATURO e Co. All Rights Reserved *\n");
printf("******************************************************\n");
printf("Inserisci la password: ");
scanf("%d", &p);
if(p==1)
{
printf("Inserisci i numeri:\n");
for(i=1; i<=M; i++)
{
scanf("%d", &x[i]);
}
s=0;
for(i=1; i<=M; i++)
{
s=s+x[i];
}
ma=s/M;
printf("la media aritmetica è: %d\n", ma);
system("PAUSE");
}
else
{
printf("Password errata: ACCESSO NEGATO!!!\n");
system("PAUSE");
}
}
grazie per l'aiuto a chiunque risponderà:)
Mr. Htech
23-03-2007, 17:55
non so come aiutarti
Ciao, per usare una password con caretteri, pressuppongo piu di 1, devi creare per forza un vettore di char, e quindi fare una stringa, poi nell'inserimento della password da parte dell'utente confronti in parellelo con l'array creato e inizializzato con la password i caratteri che inserisce lui e se corrispondono alla fine dai l'ok.
Oppure quello che inserisce la password andrà a riempire con l'inserimento un altro vettore di char e poi confronti i 2 vettori.
Per i numeri con la virgola nn devi fare altro che dichiarare le variabile di inserimento dei valori e quella della media non integer ma float e quindi nn usare %d, ma %f.
Mr. Htech
23-03-2007, 18:11
Ciao, per usare una password con caretteri, pressuppongo piu di 1, devi creare per forza un vettore di char, e quindi fare una stringa, poi nell'inserimento della password da parte dell'utente confronti in parellelo con l'array creato e inizializzato con la password i caratteri che inserisce lui e se corrispondono alla fine dai l'ok.
Oppure quello che inserisce la password andrà a riempire con l'inserimento un altro vettore di char e poi confronti i 2 vettori.
e per coprire con gli asterischi?
banana snapple
23-03-2007, 18:11
Ciao, per usare una password con caretteri, pressuppongo piu di 1, devi creare per forza un vettore di char, e quindi fare una stringa, poi nell'inserimento della password da parte dell'utente confronti in parellelo con l'array creato e inizializzato con la password i caratteri che inserisce lui e se corrispondono alla fine dai l'ok.
Oppure quello che inserisce la password andrà a riempire con l'inserimento un altro vettore di char e poi confronti i 2 vettori.
innanzitutto grazie per l'aiuto.....pero non mi è molto chiaro come devo fare...se per favore potresti spiegarmelo in un modo un po piu facile.
per il fatto dei numeri con virgola tutto ok:)
e per coprire con gli asterischi?
Usa la getch()
Questa funzione legge il primo carattere dal buffer della tastiera.
Quindi (ipotizzando che all'invio la password sia stata inserita)
fai una cosa simile a questa
do{
carattere=getch();
printf("*");
}
while(carattere!='\n');
Nota che questa versione non consente l'utilizzo di frecce+canc/backspace per editare la password.
Se ti serve basta che metti un if per i tasti che vuoi abilitare e poi li gestisci come piace a te.
io addirittura eviterei gli asterischi: potrebbero lasciar dedurre il numero di caratteri che formano la password.
Giusto, ma ricordati che la getch() non è una funzione di nessuno standard anche se di solito viene introdotta come estensione (includendo conio.h)
Saluti
banana snapple
24-03-2007, 15:31
ragazzi grazie a tutti per le risposte e scusate se vi rompo cosi tanto...ma potete spiegarmi dove sbaglio:help: ???
ho buttato giu sta roba ma non so se va tanto bene...
se eventualmente potete corregere l'errore (o errori) ve ne sarei grato..
#include <stdio.h>
#include <conio.h>
#include <process.h>
#define M 8
main()
{
int p;
float x[M], ma, s, i;
char car;
char gianluca;
char password[20];
system("CLS");
printf("*******************************************************\n");
printf("* Produced by MATURO GIANLUCA All Rights Reserved *\n");
printf("*******************************************************\n");
printf("Inserisci la password: ");
for(p=0; p<20; p++)
{
car=getch();
printf("*");
password[p]=car;
if(car==gianluca)
{
printf("Inserisci i voti della tua pagella:\n");
for(i=1; i<=M; i++)
{
scanf("%f", &x[i]);
}
s=0;
for(i=1; i<=M; i++)
{
s=s+x[i];
}
ma=s/M;
printf("La tua media scolastica è: %2.2f\n", ma);
system("PAUSE");
}
else
{
printf("Password errata: ACCESSO NEGATO!!!\n");
system("PAUSE");
}
}
}
non hai inizializzato gianluca... ma la password è composta da un solo carattere?
banana snapple
24-03-2007, 17:32
non hai inizializzato gianluca... ma la password è composta da un solo carattere?
inizializzare come??? veramente la password dovrebbe essere proprio gianluca..
Mr. Htech
24-03-2007, 17:38
non hai inizializzato gianluca... ma la password è composta da un solo carattere?
che cosa non ha inizializzato (interessa anche me)?:help:
inizializzare come??? veramente la password dovrebbe essere proprio gianluca..
Prova sostituire
if(car==gianluca)
con
if(strcmp(password,"gianluca")==0)
Qui c'è la reference della strcmp, serve per fare paragoni tra stringhe
http://www.cplusplus.com/reference/clibrary/cstring/strcmp.html
Nota che password dovrebbe essere una stringa, quindi deve essere terminata con '\0'
quindi io sostiutuirei
for(p=0; p<20; p++)
{
car=getch();
printf("*");
password[p]=car;
//qui mi pare che manchi una parentesi chiusa
con
i=0;
do{
password[i]=getch();
printf("*");
i++;
}
while(carattere!='\n')
password[i-1]='\0'//Sostituisco 1n con \0
p.s.
Un ultimo consiglio, per vedere se il suo programma funziona la cosa più semplice è armarsi di compliatore e debugger e fare qualche test, in modo da vedere cosa funziona e cosa non funziona
ti riscrivo una mia versione di programma C che prende una password:
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define PASSWORD_MAX_LENGTH 20
char *ActualPassword = "gianluca";
int main(void) {
char UserPassword[PASSWORD_MAX_LENGTH + 1];
int Index;
printf("Inserire la password (max. 20 caratteri):");
for (Index = 0; Index < 20; Index++) {
int Character = getch();
if ('\r' == Character) {
break;
}
UserPassword[Index] = Character;
}
UserPassword[Index] = 0;
printf("\n");
if (0 != strcmp(UserPassword, ActualPassword)) {
printf("Password errata\n");
return 1;
}
printf("Password corretta\n");
/* resto del programma... */
return 0;
}
ma tieni presente che manca totalmente di ogni misura di sicurezza, a parte quella di non mostrare nulla durante la digitazione ^^ (nemmeno gli asterischi: possono far dedurre la lunghezza)
banana snapple
24-03-2007, 18:14
ma tieni presente che manca totalmente di ogni misura di sicurezza, a parte quella di non mostrare nulla durante la digitazione ^^ (nemmeno gli asterischi: possono far dedurre la lunghezza)
GRAZIE MILLE!!! davvero molte grazie...per la sicurezza non ti preoccupare, è una cosa fatta cosi giusto per capire come si fa
naturalmente grazie mille anche a wisher per l'aiuto dato:mano: :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.