Estás en: Inicio >> Foros >> Informática >> Programación
Programación /

Ayuda con funcion de validacion de datos

Participa en el tema Ayuda con funcion de validacion de datos en el foro Programación.
En este codigo hice una funcion que devuelve 1 si un string existe en un ...

Buscar en este tema:
 
  •  
    #1 Ayuda con funcion de validacion de datos
    En este codigo hice una funcion que devuelve 1 si un string existe en un archivo y 0 si no existe, mi problema es que no importa la verdura que ponga siempre existe, donde esta mal el codigo ?

    Código:
    #include<stdio.h>
    #include<string.h>
    int val (char name[50])
    {
        FILE *a=fopen("C:\\Documents and Settings\\Nicolas\\Mis documentos\\Practicas en C y C++\\System I\\Clientes.txt","r");
        char *c;
        char buffer[50];
        while(!feof(a))
         {
                 c=fgets(buffer,100,a);
                 if(strcmp(name,c)==1) return 1;
                 else return 0;
         }
    }
    main()
    {
          char nombre[50];
          printf("Inserte un nombre: ");
          scanf("%s",nombre);
          if(val(nombre)==1) printf("Nombre valido");
          else printf("Nombre invalido");
          getchar();
          getchar();
    }
    
    No importa el nombre que ponga siempre dice valido, el archivo que se lee tiene por ejemplo esta estructura

    [code]nombre1
    nombre2
    nombre3
    nombre4
    nombre5[code]
    +
     
    0
    Me gusta
     
    http://www.psicofxp.com/forums/programacion.313/873183-ayuda-con-funcion-de-validacion-datos.html
    | Más
  • #2 Re: Ayuda con funcion de validacion de datos

    Originalmente publicado por Killerspam007 Ver mensaje
    En este codigo hice una funcion que devuelve 1 si un string existe en un archivo y 0 si no existe, mi problema es que no importa la verdura que ponga siempre existe, donde esta mal el codigo ?

    Código:
    #include<stdio.h>
    #include<string.h>
    int val (char name[50])
    {
        FILE *a=fopen("C:\\Documents and Settings\\Nicolas\\Mis documentos\\Practicas en C y C++\\System I\\Clientes.txt","r");
        char *c;
        char buffer[50];
        while(!feof(a))
         {
                 c=fgets(buffer,100,a);
                 if(strcmp(name,c)==1) return 1;
                 else return 0;
         }
    }
    main()
    {
          char nombre[50];
          printf("Inserte un nombre: ");
          scanf("%s",nombre);
          if(val(nombre)==1) printf("Nombre valido");
          else printf("Nombre invalido");
          getchar();
          getchar();
    }
    
    No importa el nombre que ponga siempre dice valido, el archivo que se lee tiene por ejemplo esta estructura

    [code]nombre1
    nombre2
    nombre3
    nombre4
    nombre5[code]
    Estas usando mal la funcion strcmp. Leete esto primero http://c.conclase.net/librerias/funcion.php?fun=strcmp. Basicamente tenes que fijarte si el valor que te devuelve es <,> o == a cero no si es igual a 1.

    Tambien, si lo que queres en esa funcion es devolver 1 cuando encuentra el string en el archivo y cero cuando no lo encuentra, el "return 0" deberia ir despues del while, cuando termina de recorrer todo el archivo y no encontro ningun string que sea igual.
    Me gusta este mensaje
  • #3 Re: Ayuda con funcion de validacion de datos

    Hola, gracias por contestar, arregle el codigo como me indicaste pero y agregue un break para que saliera del bucle

    Código:
    #include<stdio.h>
    #include<string.h>
    int val (char *name)
    {
        FILE *a=fopen("C:\\Documents and Settings\\Nicolas\\Mis documentos\\Practicas en C y C++\\System I\\Clientes.txt","r");
        char *c;
        char buffer[50];
        while(!feof(a))
         {
                 c=fgets(buffer,100,a);
                 if(strcmp(c,name)==0) {return 1;break;}
                 
         }
         return 0;
    }
    main()
    {
          char nombre[50];
          printf("Inserte un nombre: ");
          gets(nombre);
          if(val(nombre)==1) printf("Nombre valido");
          else if (val(nombre)==0) printf("Nombre invalido");
          getchar();
    }
    
    Pero el problema persiste, la verdad no entendi bien que devuelve la funcion strcmp, en mi manual de PCUSERS sobre C dice textualmente: "Esta funcion permite conocer si dos cadenas, pasadas como argumento, son iguales o no. Si son iguales, la funcion devuelve un entero con valor 0 ...."

    P.D. Curiosamente solo devuelve "nombre valido", si insertas el ultimo nombre que figura en el archivo abierto. :S
    Editado por Killerspam007 - 13.12.2008 02:30 hs.
    Me gusta este mensaje
  • #4 Re: Ayuda con funcion de validacion de datos

    Creo que tu problema es el siguiente:
    hace mucho q no toco C pero me parece q no te funciona por el tema del fgets , esta tomando de a 100char..

    Un ejemplo:

    Archivo: 111222333444555
    Si pones el nombre: 555
    y tenes un fgets q lee de a 6:
    va a comparar
    555 con 111222 (no son iguales)
    555 con 333444
    555 con 555 (es lo que te pasa a vos xq no hay mas caracteres para leer)

    por lo cual creo q en em main cuando ingresa el nombre, deberias de poner un
    int tamanio = strlen(nombre);

    y a val agregarle un parametro int q le pases este tamaño
    asi val te quedaria : int val (char *name,int tam)
    y al fgets ponele envez de 100 , tam y quedaria
    c=fgets(buffer,tam,a);

    De esta manera fgets te va a leer la misma cantidad de caracteres q puso enel nombre y asi compararia bien.

    Antes de tocar hace esta prueba: a fgets ponele un 1 envez de 100 y pone a buscar el segundo caracter que halla en el archivo y deberia de encontrarlo y decir valido a la segunda pasada del while.
    si pasa eso hace lo que te dije xq es ese tu problema.

    Igualmente puede ser q me este equivocando , hace mucho no toco C
    Me gusta este mensaje
  • #5 Re: Ayuda con funcion de validacion de datos

    Hola, mira probe poniendole 1 al fgets y no me funco, y la primera forma que me comentaste no me serviria si hay otro nombre que tenga igual cantidad de caracteres, quiza deba reformular el algoritmo, se te ocurre otra forma ?

    Saludos y gracias por contestar.
    Me gusta este mensaje
  • #6 Re: Ayuda con funcion de validacion de datos

    Hola devuelta, encontre una forma sencilla solucionarlo no se si te interesa pero capaz que ha alguien mas le sirve, en fin asi me queda el codigo:

    Código:
    #include<stdio.h>
    #include<string.h>
    main()
    {
          FILE *a=fopen("C:\\Documents and Settings\\Nicolas\\Mis documentos\\Practicas en C y C++\\System I\\clientes.txt","r");
          char name[50];
          char buffer[50];
          char *c;
          printf("Inserte el nombre: ");
          gets(name);
          while(!feof(a))
          {
                         c=strtok(fgets(buffer,50,a),";");
                         if(strcmp(name,c)==0) printf("Encontrado");
          }
          getchar();
    }
    
    Me gusta este mensaje
Estás en: Inicio >> Foros >> Informática >> Programación


Estadísticas del tema
  • 5 RESPUESTAS
  • 341 VISTAS
  • 3 USUARIOS RESPONDIERON
 
Ir arriba
Contacto | Acerca de | Ayuda | Términos Legales | privacidad | Pautas de convivencia | Mapa de los foros | TrabajÁ con nosotros
©2008 Psicofxp.com S.A. - Todos los derechos reservados
Certifica IAB