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 )
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.
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).