Autor
|
Tema: funcion validar un pasword (Leído 5,040 veces)
|
feedf
Desconectado
Mensajes: 46
|
buenas tardes gente tengo que hacer una funcion que valide usuario y contraseña y qe se pueda ingresar 3 veces, el tema es que cuando i=1 funciona bien pero luego en 2 y 3 no me la valida aunq ponga bien los usuarios y contraseñas yo creo que debe ser un problema con el strcmp que arrastra basura del primer bucle pero nose como limpiarlo me pueden ayudar? void pas(char,char) { const char contrasenav[11]="contrasena"; const char usuariov[8]="usuario"; int i,h; i=0; h=0; char contrasena[100],usuario[100]; for(i=1;i<=3;i++) { printf("ingrese nombre de usuario:"); fflush(stdin); gets(usuario); printf("ingrese la contrasena:"); do {contrasena[h]=getch(); printf("*"); h++; }while(contrasena[h-1]!=13); contrasena[h-1]='\0'; if (strcmp(usuariov, usuario)!= 0 || strcmp(contrasenav, contrasena)!=0) { printf("\nusuario y/o contrasena invalidos\n\n"); } else { break; } if(i==3) { printf("no tiene mas oportunidades para probar"); exit(0); } }
|
|
|
En línea
|
|
|
|
CCross
Desconectado
Mensajes: 36
|
Yo lo dejaria mas o meno asi void pass(char *nombre, char *mi_clave) { const char clave[] = "contrasena"; const char usuario[] = "usuario"; int cierto = 0, intentos = 3; do { printf("\nIntroduzca nombre de usuario: "); scanf("%s", nombre); printf("\nIntroduzca la clave: "); scanf("%s", mi_clave); if(strcmp(clave, mi_clave)==0 && strcmp(usuario, nombre)==0) { printf("\nUsuario y/o contrasena validos"); cierto = 1; } else if( intentos ) { printf("\nAcceso Denegado ...intentos restantes %d ", intentos); intentos--; } else { printf("\nNo tiene mas oportunidades para probar"); break; } } while(!cierto); }
Saludos
|
|
« Última modificación: 5 Julio 2013, 00:48 am por CCross »
|
En línea
|
|
|
|
ecfisa
Desconectado
Mensajes: 114
|
Hola. Otra forma de encarar tu código es enviando el nombre y la contraseña esperados, ejemplo: ... int login(const char*, const char*); int main() { char* nom="pepe",* pass="1234"; if (!login(nom,pass)) { printf("Ha agotado la cantidad de intentos. Presione una tecla para salir."); return 1; } printf("\n\n! Bienvenido %s !",nom ); return 0; } int login(const char* username, const char* userpaswd) { char name[100], pwd[100], ch; int i , c; for(i=1; i<=3; i++) { c = 0; do { if (ch != '\n' || ch!='\r'){ pwd[c++] = ch; } } while(ch != '\n' && ch !='\r' && c < 100); pwd[c-1] = '\0'; return 1; else printf("\n\nNombre de usuario o contrasena invalido (intento %d de 3)\n\n",i ); } return 0; }
Saludos
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
el tema es que cuando i=1 funciona bien pero luego en 2 y 3 no me la valida aunq ponga bien los usuarios y contraseñas Si apenas empiezas en tu aprendizaje del lenguaje C lo recomendado es evitar el uso de "fflush(stdin)", gets y la biblioteca conio de Borland. Mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico|. Dos errores en esa función son la falta de los nombres de los parámetros y no inicializar a cero la variable "h" antes del bucle donde se pide la contraseña. Esto ultimo es lo que provoca que la función no reconozca la contraseña como valida. Tampoco es necesario inicializar una variable con un valor cuando lo primero que haces con ella es almacenar otro valor: i=0; /* ... */ for (i = 1; i <= 3; i++)
En un caso así hay que eliminar (por superflua) la primera asignación. La función con las correcciones: #include <stdio.h> #include <stdlib.h> #include <conio.h> void val_pas(char const *nombre_ok, char const *contrasena_ok) ; int main(void) { val_pas("foo", "bar"); return EXIT_SUCCESS; } void val_pas(char const *nombre_ok, char const *contrasena_ok) { char nombre[100]; char contrasena[100]; int i; int h; for (i = 0; i < 3; i++){ printf("Ingrese nombre de usuario: "); gets(nombre ); /* Hay que cambiar por fgets */ printf("Ingrese la contrasena: "); for (h = 0; (contrasena [h ] = getch()) != '\r'; h ++){ } contrasena[h] = '\0'; if (strcmp(nombre , nombre_ok ) == 0 && strcmp(contrasena , contrasena_ok ) == 0) break; else puts("Nombre y/o contrasena invalidos"); } if (i ==3){ puts("No tiene mas oportunidades para probar"); } }
Faltan algunos cambios como la sustitución de gets por fgets, no lo agregue para no hacer mas largo el programa pero es algo que debes evitar (de nuevo hay que leer la pagina sobre recomendaciones). Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
feedf
Desconectado
Mensajes: 46
|
wow muchas gracias por las respuestas me ayudaron un monton !! voy a leer el articulo que me pasaste justamente hace 2 meses aproximadamente empece a programar y aca estoy remando jaj,
ya que estoy pregunto por ejemplo ami me enseñaron a usar printf, pero veo mucha gente q usa cin y cut o veo q vos ahora usaste puts, tienen alguna diferencia?
mil gracias !
|
|
|
En línea
|
|
|
|
ecfisa
Desconectado
Mensajes: 114
|
... ya que estoy pregunto por ejemplo ami me enseñaron a usar printf, pero veo mucha gente q usa cin y cut o veo q vos ahora usaste puts, tienen alguna diferencia?
Hola. Depende si estas programando en C o C++. Como C++ está basado en C, el compilador no se quejará si utilizas printf o scanf, etc. Aunque, si estas compilando en C++, es mejor utilizar las funciones proias de él. La situación no es reversible, no se pueden utilizar funciones propias de C++ tales como cout o cin en C. Saludos
|
|
|
En línea
|
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
veo mucha gente q usa cin y cut o veo q vos ahora usaste puts, tienen alguna diferencia? En C cuando se requiere imprimir texto con formato se utiliza printf, por ejemplo: int a = 123; /* ... */ printf("El valor de a es %d\n", a );
Para imprimir una cadena literal terminada con un avance de linea se puede utilizar printf o puts, aquí es mejor la segunda ya que el carácter '\n' se imprime automáticamente después del texto: /* O bien */
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
feedf
Desconectado
Mensajes: 46
|
interesante muchas gracias !
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
se puede crackear pasword de zip?
Ingeniería Inversa
|
maxmag
|
4
|
3,570
|
10 Mayo 2007, 02:27 am
por sempus
|
|
|
función para validar urls
PHP
|
Hans el Topo
|
1
|
1,944
|
16 Diciembre 2008, 03:58 am
por WHK
|
|
|
funcion para validar email
Programación Visual Basic
|
bomba1990
|
2
|
4,765
|
17 Julio 2009, 00:59 am
por seba123neo
|
|
|
FUNCION PARA VALIDAR EDAD
Programación C/C++
|
carlosabcs18
|
6
|
4,178
|
16 Julio 2014, 22:59 pm
por leosansan
|
|
|
no se como validar con una función, ni como cargar un vector
Programación C/C++
|
toomiblanco
|
3
|
2,520
|
30 Mayo 2017, 23:19 pm
por MAFUS
|
|