Utilizar Strtok con ficheros???

Iniciado por Zegaral, 10 Marzo 2019, 20:28 PM

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

Zegaral

Hola! Estaba realizando un sistema de "login" (usuario y contraseña) en C, pero tengo que hacerlo utilizando una archivo que almacena datos de los jugadores de la siguiente forma:
John245/Juan Perez/01/100/0/ON/200/0/0/JGD/jp123
Perk243/Pedro Mieres/05/100/0/ON/400/0/0/ADM/pm213
Man091/Manuel Campaña/08/100/0/OFF/100/13/JGD/mc987

Donde el primer dato es el usuario y el último dato es la contraseña.
Como los datos están separados por '/' se me había ocurrido utilizar la función strtok(), el problema es que no se como hacer que la función me devuelva el dato como una cadena, y que esa cadena se compare con la introducida por el usuario cuando le pides que Inicie Sesión. ¿Alguna ayuda?
El código de la función que llevaba por el momento era el siguiente:
void login () {

FILE *jugadores ;
char usuario[20] ;

jugadores = fopen("jugadores.txt", "r++") ;

if ( jugadores == NULL ) {

printf("\nError de apertura en el fichero\n");

}

else {

printf("\nNombre de Usuario:\t");
scanf("%s", usuario) ;



fclose(jugadores) ;

}
}

Muchas gracias y un saludo.

MAFUS

Primero consigue la cadena con fgets y usas strtok para conseguir el nombre de usuario.
Si no es igual al nombre introducido por teclado vuelves a conseguir otra línea con fgets.
Si es igual al nombre introducido por teclado vuelves a usar strtok para conseguir la contraseña.
A partir de ahí haz lo que necesites: que pida tres veces la contraseña si se equivoca, rechace al usuario, bloquee la cuenta, lo deje entrar si ha acertado... ya depende de tí.

Zegaral

Enorme compañero!  ::)
Hice lo que aconsejaste, pensé un poco y Voilá, funciona a la perfección.
Aún me queda hacer el tema de la contraseña, que lo terminaré mañana, te dejo por aquí el código del usuario para que veas lo que hemos conseguido  ;-):
void login () {

FILE *jugadores ;
char usuario[20] ;
char contrasena[20] ;
char copia_usuario[100] ;
char lectura;
char *token ;
const char separador[2] = "/" ;
int opcion , cont = 0 ;

//Abrimos el fichero
jugadores = fopen("jugadores.txt", "r++") ;

if ( jugadores == NULL ) {

printf("\nError de apertura en el fichero\n");

}

else {

//Pide el nombre de usuario
printf("\nNombre de Usuario:\t");
scanf("%s", usuario) ;

//Comprueba que el nombre de usuario está en el fichero
do {

//Asigna a la cadena auxiliar una linea de 100 caracteres del fichero
fgets (copia_usuario, 100 , jugadores) ;
//Coge lo que haya antes del / de dicha cadena
token = strtok (copia_usuario, separador) ;

//Si el fichero termina o no encuentra comparativa sale
} while (!feof(jugadores) && strcmp(token, usuario) != 0) ;

//Si ha encontrado usuario pide contraseña
if ( strcmp(token, usuario ) == 0 ) {

//Pedimos la contraseña
printf("\nContrase%ca:\t", 164);
scanf("%s", contrasena) ;

}

//Sino ha encontrado usuario pide registro
else {

printf("\nUsuario no encontrado\n");

//Inicializamos el menu si no encuentra el usuario
do {

printf("\n[1] Volver a introducir usuario\n[2] Registrarme\n");
scanf("%i", &opcion);

} while ( opcion != 1 && opcion != 2 ) ;

switch (opcion) {

case 1:

printf("Hola");
break ;

case 2:

printf("Hola");
break;

}
}

}

fclose(jugadores) ;

}

Gracias de nuevo!