Problema comparando strings

Hola Rober,
Te escribo otra vez puesto que la anterior vez me fuiste de gran ayuda (muchas gracias por cierto), el problema que tengo ahora es que soy novato en la programación y tengo un proyecto que hacer, tengo casi todo hecho pero no se como puedo comparar cadenas de caracteres con otras que tenga metidas en un fichero, es decir tengo un fichero creado con datos de cds y lo que quiero es que que yo introduzca el código que previamente he introducido en el fichero y me vaya comparando registro por registro a ver si coincide y si coincide que me lea el registro completo y que me lo muestre completo. Mi función te la pasteo aquí, lo que hace simplemente es introduzco un numero de registro y me lo visualiza, solo lo he hecho para ver si me guardaba bien, y si me lo guarda bien:
void ver(){
FILE *archi1;
disco *cd;
int a;
cd=new disco[10];
clrscr();
rectangulo(78,23,1);
gotoxy(10,10);
cout<<"Teclea el numero de registro: ";
cin>>a;
archi1=fopen("discos.txt","rb");
fseek(archi1,(a-1)*sizeof(disco),SEEK_SET);
fread(cd,sizeof(disco),1,archi1);
nuevo_cd();
textcolor(LIGHTGRAY);
gotoxy(25,8);
cprintf("%s",cd->codigo);
gotoxy(18,14);
cprintf("%s",cd->artista);
gotoxy(52,14);
cprintf("%s",cd->album);
gotoxy(21,17);
cprintf("%s",cd->duracion);
fclose(archi1);
getch();
infor_cd();
}
Si tienes cualquier duda preguntame porque igual se me ha pasado explicarte algo.Por cierto los códigos que ir seguidos porque si no con hacer coincidir el código con el registro ya valdría.
Gracias de antemano

1 Respuesta

Respuesta
1
Es muy sencillo, solo hay que meter un ciclo a tu función que vaya leyendo uno a uno todos los registros de tu archivo y vaya comparando los códigos de cada registro contra el que estamos buscando.
La función va a recibir de parámetro la cadena con el código que vamos a buscar y lo va a mostrar si lo encuentra, y si no, va a mostrar el mensaje correspondiente.
void ver2(char *codigo) {
int a;
disco *cd;
FILE *archi1;
cd = new disco;
clrscr();
rectangulo(78, 23, 1);
gotoxy(10, 10);
cout << "Teclea el numero de registro: ";
cin >> a;
archi1 = fopen("discos.txt", "rb");
if (archi1 == NULL) {
cout << "ERROR: No se pudo abrir el archivo discos.txt";
return;
}
Fread(cd, sizeof(disco), 1, archi1); //lee el primer registro
//el ciclo termina cuando se llega al último registro del archivo
while (! feof(archi1)) {
//se compara el código del registro actual con el buscado y si es igual, lo muestra y sale
if (strcmp(codigo, cd->codigo) == 0) {
// nuevo_cd(); //no sé que hace
textcolor(LIGHTGRAY);
gotoxy(25,8);
cprintf("%s",cd->codigo);
gotoxy(18,14);
cprintf("%s",cd->artista);
gotoxy(52,14);
cprintf("%s",cd->album);
gotoxy(21,17);
cprintf("%s",cd->duracion);
fclose(archi1);
getch();
// infor_cd(); //no sé que hace
return;
}
fread(cd, sizeof(disco), 1, archi1); //lee el siguiente registro
}
cout << "El registro con el codigo buscado no existe";
fclose(archi1);
}
Muchas gracias rober me has sido de gran ayuda, es que la verdad es que estoy empezando y todavía estoy muuuuuuuuy verde. Pero la verdad es que se puede decir que me has salvado.
Gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas