Shawen escribió:Dirigido para los que me echaron una mano anoche con el ejercicio de C++ (Darix, Redon, Djnardo y meloncito)
, ya lo tengo:
Pongo la función :
bool Comprobar (Nuevolibro datos)
{
bool ok = true;
string a = datos.titulo; // Es la estructura donde metí el título del libro para analizar
string frase;
ifstream f;
f.open (nom_fich.c_str() );
if (!f)
{
cout << "Error al abrir el fichero. " << endl;
}
else
{
while ( getline ( f, frase ))
{
if ( frase == a)
{
ok = false;
break;
}
}
}
f.close();
return ok;
}
Ha costado sus horas ... toto para una tontería tan grande como el " while ( getline ( f, frase )) " ... yo no había pensado en que con un getline y un while pillaría todas las líneas del fichero una por una hasta terminar.
Una cosilla, no está del todo bien la práctica.
Por el enunciado deduzco que te dicen que metes toda la información en el fichero sobre los libros.
Tú la has metido de cierto modo, por ejemplo, imagino que si el libro es Autor + Título + Número de páginas, pues tienes algo como
Julio Verne|Viaje al centro de la tierra|300
Por lo tanto en cada linea del fichero tienes la estructura escrita de ese modo, entonces, ahora a la hora de leer tienes que ser consecuente con cómo la almacenaste, para leer la linea entera en un String, como has hecho e ir "paseándote" por el String, para coger tu título, en este caso en el segundo slot, (lo más fácil es ponerlo al principio de todos modos, tal que Viaje al centro de la tierra|Julio Verne|300 así pues no tienes que saltar al principio, sino que vas leyendo caracter a caracter hasta que llegues al primer símbolo |)
Ojo, si sólo grabas los títulos este paso que te comento no es necesario (pero de lo que extraigo del enunciado no sólo los títulos van a estar grabados)
Por último, la comparación de cadenas que haces "frase == a", yo soy Java, así que no te lo puedo decir al 100% pero en Java una cadena no se compara así, sino que tienes que usar una función que te compare las cadenas, asegurate, pero eso sólo, asegurate de que puedes compararlas así (a mí me suena que tienes que hacerlo carácter a carácter)
Lo último ya que te puedo decir, es que la manera que tienes de salir del bucle con un break, si estás en primero de programación, supone que te tachen el ejercicio, se supone que no debes hacerlo así, porque rompes el flujo.
Por lo demás está bien.
Un saludo