Foros del Web » Programación para mayores de 30 ;) » C/C++ »

problema con bucle

Estas en el tema de problema con bucle en el foro de C/C++ en Foros del Web. Hola que tal? estoy intentando resolver un ejerecicio el cual me pide una temperatura un espacio y luego el nombre de una ciudad todo eso ...
  #1 (permalink)  
Antiguo 16/11/2015, 19:22
 
Fecha de Ingreso: octubre-2015
Mensajes: 17
Antigüedad: 9 años, 1 mes
Puntos: 0
problema con bucle

Hola que tal? estoy intentando resolver un ejerecicio el cual me pide una temperatura un espacio y luego el nombre de una ciudad todo eso con un archivo txt y la finalizacion del archivo son 3 puntos ejemplo : 23.3 Aitona
18.0 Els_Alamus
...
mi problema es que no se por que mi bucle queda infinito se aceptan subjerencias

Código C++:
Ver original
  1. cout<<endl<<"Temperaturas."<<endl<<endl;
  2.  
  3.   ifstream F4;
  4.   F4.open("Temperaturas.txt");
  5.  
  6.   double temp;
  7.   char c;
  8.   string tempe;
  9.  
  10.     F4>>temp >>c>> tempe;
  11.  
  12.   while (tempe != "...") {
  13.  
  14.    cout<<temp<<" "<<tempe<<endl;
  15.  
  16.  
  17.      F4>>temp >>c>> tempe;
  18.     }
  19.  
  20.     cout<<endl<<endl<<"La temperaturas es : "<<temp<<endl;
  21.   cout<<endl<<".................................."<<endl<<endl;
  #2 (permalink)  
Antiguo 17/11/2015, 03:14
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: problema con bucle

Según lo que has puesto en tu enunciado la última línea empieza con '...', pero tú estás leyendo primero un double, después un char y, por último un string...

La lectura del double te empezará dando error, ya que '...' no se puede convertir a double, del resto de lecturas ya no te puedes fiar ya que no has reseteado el bit de error, pero aun así, suponiendo que funcionasen correctamente... ¿qué estás leyendo exactamente?

opción 1:
* double no lee nada
* char lee un '.'
* string lee "..", que no es igual a "...", luego el programa sigue leyendo pero ya ha llegado al final del fichero... desastre asegurado

opción 2:
* double lee el primer caracter pero no puede convertirlo a float
* char lee un '.'
* string lee ".", que tampoco es igual a "..."

opción 3:
...

lo mires como lo mires no hay opción buena.

Puedes hacer varias cosas:

1. Leer toda la línea, verificar si es igual a "..." para finalizar y, en caso contrario parsear los datos leyendo el string.
2. Llamar al método peek de ifstream. Este método te devuelve el siguiente carácter pero no lo saca del fichero. Si el caracter devuelto es '.' posiblemente estés ante el final del fichero. Si no es así lanzas la lectura normal
3. Después de leer el double compruebas los bits de estado de ifstream... si se ha producido un error posiblemente sea porque estás leyendo los puntos finales.

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.
  #3 (permalink)  
Antiguo 17/11/2015, 17:29
 
Fecha de Ingreso: octubre-2015
Mensajes: 17
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: problema con bucle

Es que yo de donde estoy estudiando "internet" no enseñan los métodos de la librería fstream ,entonces no se si hacen este tipo de ejercicios para que uno busque como solucionarlos o la solución es de otra forma :S
  #4 (permalink)  
Antiguo 18/11/2015, 02:18
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: problema con bucle

Cita:
Iniciado por ekis182 Ver Mensaje
Es que yo de donde estoy estudiando "internet" no enseñan los métodos de la librería fstream
Si te tuviesen que explicar uno a uno todos los métodos de, digamos, la mitad de las clases de la librería estándar el curso podría durar unos 5 años...

Internet es una librería fantástica para buscar información sobre las librerías que vayas a usar. En tu caso hay documentación de sobra sobre la interfaz de ifstream... todo es cuestión de curiosear y de echarle tiempo.

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.

Etiquetas: bucle, char, int, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:17.