Ayuda con Archivos

Iniciado por jscrip, 4 Febrero 2013, 07:57 AM

0 Miembros y 1 Visitante están viendo este tema.

jscrip

Hola amigos, necesito me ayuden con unos problemas que tengo en mi programa, no entiendo por qué no funciona:
Ingresar al Sistema.
Se pide por teclado que ingrese el usuario y luego la contraseña, se compara con lo que hay en el archivo accesobanco.text; de existir dicho usuario/contraseña, se muestra mensaje: "acceso exitoso".
Si no existe el usuario, se muestra mensaje: "usuario incorrecto".
Si la contraseña es equivocada, se muestra mensaje: "contraseña incorrecta". Si la contraseña digitada no es correcta, se da la oportunidad de volver a ingresar la contraseña, si en 3 oportunidades falla al ingresar la contraseña, se bloquea el acceso al sistema para ese usuario en este momento.

void ingresarsistema()
{
FILE *p;
char S1[9], S2[5], ch;
char user[9], pass[5], tmp[5];
int f1=0, i;
p = fopen("accesobanco.txt", "r");
printf("User: ");
scanf("%s", user);
printf("\nPassword: ");
fflush(stdin);
scanf("%s", pass);
while(!feof(p))
{
fscanf(p, "%[^,], %[^\n]\n", S1, S2);
if(strcmp(user, S1) == 0) /*Se compara cadenas de usuarios*/
{
f1=1;
strcpy(tmp, S2);
if(strcmp(pass, S2) == 0) /*Se compara cadenas de contraseñas*/
{
printf("\nAcceso Exitoso\n");
return;
}
}
if(f1 == 0)
{
printf("\nUsuario Incorrecto\n");
}
else
{
printf("\nContraseña Incorrecta");
for(i=0; i<2; i++)
{
printf("\nVuelva a ingresar la contrasenia: ");
fflush(stdin);
scanf("%s", pass);
{
printf("\nAcceso Exitoso\n");
return;
}
}
printf("\nEl sistema ha sido bloqueado\n");
}
}
fclose ( p );
}


Agradecería mucho su ayuda.

Maik33

¿Que problema tienes?

Acabo de hacer una prueba y funciona bien. Lo único que no funciona son lo de las 3 oportunidades. ¿Tienes el problema con eso?

jscrip

Cita de: Maik33 en  4 Febrero 2013, 09:05 AM
¿Que problema tienes?

Acabo de hacer una prueba y funciona bien. Lo único que no funciona son lo de las 3 oportunidades. ¿Tienes el problema con eso?
Exacto, no me funcionan las 3 oportunidades.

amchacon

Código (cpp) [Seleccionar]
for(i=0; i<2; i++)
{
    printf("\nVuelva a ingresar la contrasenia: ");
    fflush(stdin);
    scanf("%s", pass);
    {
        printf("\nAcceso Exitoso\n");
        return;
    }
}

No falta aquí un if?
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

Maik33

Si, cuando lees la contraseña por segunda vez, no comparas con nada, y por eso siempre te da "Acceso Exitoso".

jscrip

Cita de: amchacon en  4 Febrero 2013, 10:35 AM
Código (cpp) [Seleccionar]
for(i=0; i<2; i++)
{
    printf("\nVuelva a ingresar la contrasenia: ");
    fflush(stdin);
    scanf("%s", pass);
    {
        printf("\nAcceso Exitoso\n");
        return;
    }
}

No falta aquí un if?
un error mío al subir el codigo y borrar comentarios:
Código (cpp) [Seleccionar]
for(i=0; i<2; i++)
{
    printf("\nVuelva a ingresar la contrasenia: ");
    fflush(stdin);
    scanf("%s", pass);
    if(strcmp(pass, tmp) == 0);
    {
        printf("\nAcceso Exitoso\n");
        return;
    }
}
con ese if lo tengo y no funciona

Maik33

Ya he encontrado el fallo.

if(strcmp(pass, tmp) == 0);
   {
       printf("\nAcceso Exitoso\n");
       return;
   }


En la comparacion tienes:
if(strcmp(pass,tmp)==0);

El punto y coma, hace que siempre se ejecute lo que hay despues del if.

jscrip

Cita de: Maik33 en  4 Febrero 2013, 14:11 PM
Ya he encontrado el fallo.

if(strcmp(pass, tmp) == 0);
   {
       printf("\nAcceso Exitoso\n");
       return;
   }


En la comparacion tienes:
if(strcmp(pass,tmp)==0);

El punto y coma, hace que siempre se ejecute lo que hay despues del if.
era de madrugada, disculpen, los subí mal, pero en mi programa si lo tengo sin el ; en cuanto a sintaxis creo que esta correcto, pero aun así no funciona

naderST

Al observar tu código me di cuenta que haces fflush al flujo de entrada, pásate por los siguientes enlaces:

http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

Documentación de fflush

http://linux.die.net/man/3/fflush

jscrip

Cita de: naderST en  4 Febrero 2013, 16:06 PM
Al observar tu código me di cuenta que haces fflush al flujo de entrada, pásate por los siguientes enlaces:

http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

Documentación de fflush

http://linux.die.net/man/3/fflush
De hecho el programa lo hice en linux, al pasarlo a windows le puse el fflush, de todas manera si lo quito o borro el buffer con while(getchar()!='\n'); el programa sigue sin funcionar.