Comparación de palabras en C

Iniciado por genuine17, 3 Junio 2017, 22:39 PM

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

genuine17

Hola, buenas! soy un principiante en esto de programación  :xD  he estado intentando extraer una clave  ingresada por el usuario (Ej: ASDL03002) y buscarla dentro de un fichero para luego mostrar toda la línea donde se encuentre la clave.
Suponiendo este es el contenido de mi fichero:
ASDF01003 Caja de Herramientas
DFTS09886 Caja de Libros
HJKL76543 Caja Vacía

Quiero que el usuario entre por ej la segunda clave (DFTS09886) para buscarla dentro del fichero y que muestre en pantalla: "Clave: DFTS09886 Producto: Caja de Libros" ó "DFTS09886 Caja de Libros" esto es lo que llevo:

#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#define LIMITE 150

int main()
{
    int i;
    char cadena1 [LIMITE],aux[LIMITE];
    printf("Ingrese la clave a buscar: \n");
    gets(aux);
   FILE* fichero;
    fichero = fopen("Claves.txt", "rt");
   while(!feof(fichero))
    {
      i=0;
       do
      {
         fscanf (fichero, "%c", &cadena1);
         i++;
       }
      while (cadena1[i-1]>=32 && cadena1[i-1]<=126);
      if(strcmp(cadena1,aux)==0) /*supuestamente aquí comparo ambas cadenas para ver si son iguales pero al parecer no sirve  :( */
       {
          printf("\nCoincidencia encontrada!\n");
         puts(cadena1);
          puts(aux);
          break;
       }
      cadena1='\0';
       if(i==10)
          puts(cadena1);
         //Esta parte me commprueba que efectivamente extrae las claves
   }
    puts("\nProceso completado");
    return 0;
}

Siento que mi error está en el bucle que uso para buscar las claves dentro del fichero pero la verdad estoy perdido  :silbar:
PD: El fichero real tiene muchas más líneas (no se si eso sea importante incluso  ;D )

n-utz

Buenas, mira primero te recomiendo que pongas tu codigo en su GESHI correspondiente, asì:

...

Así serà mas entendible.

Ahora

while (cadena1[i-1]>=32 && cadena1[i-1]<=126);

Debería ser solamente >32 asi, no te toma el espacio, porque supongo que eso, te toma toda la linea, por ejemplo: Te toma "ASDF01003 Caja de Herramientas" y no solo "ASDF01003". Entonces las claves nunca coincidirán. También puedes reemplazarlo por:

fscanf(fichero, "%s", &cadena1);

Supuestamente te tomaría hasta el espacio en blanco, y asi tendrás tu clave solamente, después deberías rebuscartela para obtener el objeto que abrirá con esa clave.

Espero haberte ayudado, suerte.


MAFUS

Ya que cada caden es una línea del archivo tómala con fgets, así la recibes toda de una. Por cierto deberías usar también fgets en vez de gets (el archivo a usar es stdin).