05/11/2015, 09:20
|
| | Fecha de Ingreso: octubre-2014 Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 3 meses Puntos: 204 | |
Respuesta: Hacer dos comprobaciones en un WHILE con funciones Con respecto al código que has puesto, varias cosas: No es congruente
Si se supone que el programa tiene que encontrar una palabra... por qué incializas el booleano PalabraEncontrada a true? Se supone que al inicio del algoritmo no has encontrado la palabra, por lo que lo lógico sería que esta variable valiese false. ¿Por qué matizo esto? Porque el código tiene que ser lo más intuitivo posible a fin de reducir el número de errores... al primer vistazo se entiende que la función ha encontrado una palabra nada más empezar!!! Ojo con los return (I)
Una función que retorna un valor ha de tener, al menos, un return como última línea del código... en tu caso eso no se cumple, por lo que... ¿Qué sucede si PalabraEncontrada pasa a valer false y se sale del bucle? ¿Qué valor se devuelve entonces? Ojo con los return (II)
Si en los dos sitios donde PalabraEncontrada pasa a valer false pones un return... ¿Cuándo se cierra el fichero? ¿Qué pasa si un fichero que no se cierra se intenta abrir otra vez? ¿para qué tienes while(PalabraEncontrada)... si no dejas que en esa línea la variable pueda valer false?
No pinta demasiado bien, verdad? Ámbito de las variables
Como te comenté, el stream únicamente tiene sentido que lo pases como parámetro si el fichero ya viene abierto al llamar a la función... y por supuesto si la función tampoco se encarga de cerrarlo. Para abrir y cerrar el archivo dentro de la función es preferible que el stream pase a ser una variable local.
Además, si únicamente vas a utilizar el stream para leer un fichero, intenta usar la clase mínima que cumpla con tus requisitos... en este caso ifstream. ¿Por qué recurrir a los mínimos? para lavarte los dientes usas un tunel de lavado o te conformas con un cepillo de dientes?? pues eso. stream.eof()
Este método no se actualiza así por las buenas... se actualiza SIEMPRE después de una lectura, por lo que no tiene demasiado sentido que lo estés comprobando al principio del bucle.
A lo anterior... ¿Qué pasa con eof() si se intenta abrir el mismo archivo por segunda vez sin haberlo cerrado previamente?
Al final, como ves, todo está relacionado. Por eso hay que ser tan cuidadoso y pulcro a la hora de escribir el código.
Tambíen podías probar a escribir pseudocódigo y después llevar eso a código fuente... es otra forma de escribir un programa coherente.
Un saludo.
__________________ La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo. |