Ayuda para hacer una función que busque en un archivo - C

Iniciado por lucasxxviii, 24 Junio 2016, 06:43 AM

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

lucasxxviii

#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<stdlib.h>

typedef struct
{
    char marca[50];
    char modelo[50];
    float precio;
    int cantidad;
}impresora;


void imprimir_menu (){


printf("\n\t ...MENU....\n");
printf("1) Agregar Informacion de una impresora: \n");
printf("2) Mostrar el contenidp del archivo\n");
printf("3) Busqueda de impresoras por marca y precio \n");
printf("4) Salir del programa\n");
printf("\n\tOpcion: ");


}

void agregar_impresora(){
impresora imp;

FILE * miarchivo;
char*  nombrearchivo = "Problema2.txt";

miarchivo= fopen (nombrearchivo, "a");  // agrega al final

if(miarchivo==NULL) return -1 ;


printf("\n\n\t....Informacion de impresora....: \n\n ");
fflush(stdin);

printf("Ingrese la Marca: ");
scanf("%[^\n]",&imp.marca);
fprintf(miarchivo,"Marca: %s\n",imp.marca);

fflush(stdin);
printf("Ingrese el Modelo: ");
scanf("%[^\n]",&imp.modelo);
fprintf(miarchivo,"Modelo: %s\n",imp.modelo);

fflush(stdin);
printf("Ingrese el Precio: ");
scanf("%f",&imp.precio);
fprintf(miarchivo,"Precio:$ %2.f\n",imp.precio);

fflush(stdin);
printf("Ingrese la Cantidad: ");
scanf("%d",&imp.cantidad);
fprintf(miarchivo,"Cantidad:%d\n\n\n",imp.cantidad);




fclose(miarchivo);
}

/*void mostrar_impresora(){

FILE* miarchivo;
char* nombrearchivo="Problema2.txt" ;
char nombretemp[50];
int termino=0;

miarchivo = fopen(nombrearchivo,"r");
if (miarchivo==NULL) return -1;

printf("Lista de Impresoras: \n");

termino=fscanf(miarchivo, " %[^\n]",&nombretemp);
// fcanf devuelve EOF si esta al final de archivo

while(termino!=EOF){

printf("%s\n",nombretemp);

termino=fscanf(miarchivo, " %[^\n]",&nombretemp);
}


fclose(miarchivo);


}*/

void mostrar_impresora(){
FILE *miarchivo;
int c;

char direccion[]= "Problema2.txt";
miarchivo = fopen(direccion,"r"); //r = read - leer

if(miarchivo == NULL){
printf("Error al tratar de leer el archivo");
return -1;
}

while((c=fgetc(miarchivo))!=EOF){
if(c == '\n'){
printf("\n");
}
else{
putchar(c);
}

}


fclose(miarchivo);


}




void buscar_impresora(){

}




int main(){

int salir=0;
int opcion;




while(salir==0){
opcion=-1;

imprimir_menu();

fflush(stdin);
scanf("%d",&opcion);

if(opcion==4) salir=1;
if(opcion==1) agregar_impresora();
if(opcion==2) mostrar_impresora();
if(opcion==3) buscar_impresora();




}






system("pause");

return 0;
}





No puedo hacer la funcion de buscar necesito que realice esta condicion:

* busqueda de impresora por marca y precio,
(en esta opcion se debe ingresar una marca y dos numeros reales, luego mostrar todos
los datos de la impresoras en donde exista coincidencia con la marca y los precios deben estar comprendidos entre los dos numeros ingresados.

desde ya muchas gracias al que me pueda ayudar.




MAFUS

No hagas el archivo en modo texto, hazlo binario. Introduce los datos tal y como están en la estructura sin añadidos como Marca: , Modelo: , etc. Así los podrás sacar directamente y cargar una estructura cuándo los leas. De esta forma podrás comparar los datos que quieras con la estructura que habrás rellenado.

lucasxxviii

Si comprendo que puedo hacer la busqueda con el archivo en binario, pero justo este enunciado me pide que sea .txt y no entiendo como puedo realizar esa busqueda. Gracias

MAFUS

Parecido: cargas cada dato de la estructura en modo texto con fprintf, pon un carácter de retorno de carro.
A la hora de leer cargas los datos a la estructura convirtiéndolos a los que necesites mediante sscanf. Una vez que tienes la estructura cargada comparas los datos que necesitas.

lucasxxviii

Disculpa mi ignorancia se programar pero basico por ahora, me podrias explicar o mostrarme un ejemplo si no es mucha molestia, gracias por la ayudad.

AlbertoBSD

Hola.

Te dejo unos videos que he hecho al respecto:

[youtube=640,360]https://www.youtube.com/watch?v=8wKRS9TGplQ[/youtube]

[youtube=640,360]https://www.youtube.com/watch?v=DOqtEMW1Nqk[/youtube]

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW