leer archivo apartir del siguiente renglon y comparar con una cadena

Iniciado por ivan rios, 23 Noviembre 2017, 00:34 AM

0 Miembros y 2 Visitantes están viendo este tema.

ivan rios

buen dia, tengo un problema que no se como leer solo apartir del segundo renglon del archivo, ya que hay es donde almacene la clave del usuario y tampoco sabria como compararla con la lcave anteriormente leida. 
una parte del codigo es esta:

////////////////////////////////FUNCION QUE COMPRUEBA LA CLAVE/////////////
/////////////////////////////////////////////////////////////////////////
int compruebaclave(){
char clave[24];


    printf("\nPOR FAVOR INGRESE LA CLAVE: ");
    int conta=0;
    int i=0;
    int intent=3;
   
   
   
   
     //Se piden caracteres hasta que se introduca enter
    while(clave!=13)
    {

         //Capturamos carácter
        clave=getch();////cifrado por desplazamiento
       
        //Si es un carácter válido y no se ha sobrepasado el límite de 20 caracteres se imprime un asterisco
        if(clave>32 && i<24)
                {
                  printf("*");
                  i++;
                }
        //Si se pulsa la tecla RETROCESO, se retrocede un carácter, se imprime un espacio para eliminar el asterisco y se vuelve a retroceder para que el siguiente asterisco se coloque a continuación del anterior.
        else if(clave==8 && i>0)
                {
                  printf("%c",8);
                  printf(" ");
                  printf("%c",8);
                  i--; 
                }
                   
    }   
    archivo=fopen("seguridad.gra", "r");
   
   char   clavearchivo;
   
   
   while((clavearchivo=fgetc(archivo))!='\n')
clavearchivo=fgetc(archivo);

if(strcmp(clavearchivo,clave)==0)
    printf("datos aceptados");
    else printf("datos incorrectos");

Serapis

Primero debes tener claro el formato del fichero...
Punto de lectura de la clave: Puedes tener 3 casos típicos:
1 - Sabes que la clave se guarda en una línea, específica, entonces en este caso, lo ideal es leer líneas, una por una.
2 - Se sabe que comienza en un punto específico, por ejemplo el la posición 143, entonces en este caso, lo ideal es mover el puntero de lectura a esa localización, para empezar a leer desde ahí.
3 - Algo intermedio entre ambos, son los registros... un registro es una estructura cada uno es como si fuera una línea (caso 1), pero con la particularidad de que un registro tiene un tamaño fijo en bytes (la línea se reconoce por un carácter que delimita su final (típicamente retorno de carro y/o avance de línea). pero al igual que la localización (caso 2), tienes que saber que número de registro contiene la clave deseada, luego se salta al punto específico (igual que en ese caso 2, la dirección será: el tamaño del registro en bytes multiplicado por el número de registro). Se recupera dicho registro y a través del campo específico se tiene la clave.
4 - No se sabe en qué línea está, tampoco que posición ocupa, y no son registros, lo único que se sabe es que hay algún carácter identificativo del comienzo de la clave que podría o no ser único (incluso peor estar a cierta distancia de ese identificador). en resumen el fichero no tiene formato preciso, pero al menos proporciona un mínimo para localizar la clave. Ahí no queda otra que recorrer el fichero byte a byte hasta encontrar el identificador (que no tiene por qué ser de 1 solo byte, podrían ser perfectamente: 4,8, 13, 231...¿?) y luego de hallado el identificador, avanzar hasta el comienzo de la clave si no está inmediatamente tras dicho identificador.

Aparte debe haber un tamaño reconocido para la clave, igualmente suele haber varias maneras:
1 - El tamaño es dijo y siempre es el mismo, por ejemplo 16, 32, 40,...¿? caracteres. Pués eso, se leedicha cantidad.
2 - El tamaño viene fijado con anterioridad a la clave con 1,2,4 bytes... depende del tipo de datos usado para almacenar el valor, pero lo lógico es que no fuere más de 1 byte (que permite un largo de clavede hasta 256, salvo que se separa que ese valor sirve para hallar el tamaño real, con un factor multiplicativo u otra expresión más omenos compleja).
3 - A priori no hay un tamaño preasignado, pero hay un identificador de 'fin de clave' (o de string si fuera el caso), cuando se localiza desde el comienzo hasta el final ese es el tamaño de la clave.
4 - En un registro, el tamaño (cantidad de caracteres) está prefijado por el diseño del registro.

Ahora tu debes saber que formato sigues tanto para el punto de comienzo como para indicar su tamaño. con toda esa info, debes colocar el punteor de lectura en el punto adecuado y leer y almacenar como clave la cantidad de caracteres que determinan la clave.
Pudiera ser que la clave tenga un tamaño prefijado (por ejemplo en un registro, de tamaño 32, 40, 60,etc... que indicaría el máximo para la clave), en tal caso si no es obligatorio alcanzar ese tamaño, debe despreciarse los caracteres de espacio (u otro) consignados a la derecha de la clave, para completar el tamaño prefijado para almacenarlo.

En alguna parte tendrás almacenado la clave que introduce el usuario (una variable que se reclama al usuario en algún momento). Validarlo es comparar que ambas claves coinciden caracter a carácter. Al caso en la fase de diseño debes considerar el asunto de la capitalización (si mayúsculas es igual o distinto de minúsculas... para las contraseñas debería ser distinto "A" de "a" de "Á" de "Ä", de "á", de "", etc..).

Bien que guardar una clave a fichero, no es cosa de seguridad, pero como será un ejercicio y nada profesional, vale...

Por último considera importante el tamaño de la clave para tus bucles, tanto de comparación como de entrada del usuario... como de guardar y leer de fichero, fija un tamaño máximo y uno mínimo (esto último lo haces bien rechazando pidiendo más caracteres hasta llegar a un mínimo), pero considera rellenar hasta el largo máximo con cualquier otro carácter (espacio, u otro) así guardas siempre afichero unacantidad fija y lees de fichero una cantidad fija, y luego cuando el usuario finalice de entrar caracteres, tu completas su clave hasta el largo máximo con ese carácter de relleno, antes de hacer la comparación. Así comparas siempre dos claves de igual tamaño. etc...
y de entrada deja la clave en el fichero en la primera línea, primer byte, cuando todo te salga bien hasta ahí, ya miras de ponerlo en otra línea y tal... paso a paso cuando aprendes...

MAFUS

Metes cosas raras dentro de clave. Primero deberías capturar el carácter nuevo y si pasa tus filtros lo metes dentro de clave, sino haces lo que debes hacer según sea un \n, \b, etc.

ivan rios