Pregunta

Una pregunta bastante rápido ... No puedo entender por qué este bucle nunca termina ...

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
 //[city1][city2][distance]

 ifstream sourcefile;

 int data[50][50];



 sourcefile.open("a5.txt");
 if(!sourcefile)
 {
  cout << "file not found" << endl;
  return 1;
 }

 int temp1, temp2, temp3, check;

 char reader;

 check = 0;



 while(reader != 'Q')
 {
  sourcefile >> temp1;
  sourcefile >> temp2;
  sourcefile >> temp3;

  data[temp1][temp2] = temp3;

  cout << "data[" << temp1 << "][" << temp2 << "] = " << temp3 << endl;
  check++;

  if(check > 100)
  {
   cout << "overflow" << endl;
   return 1;
  }

  reader = sourcefile.peek();


 }



 return 0;
}

El archivo de entrada

1 2 10
1 4 30
1 5 99    
2 3 50    
2 1 70    
3 5 10    
3 1 50    
4 3 20    
4 5 60    
5 2 40   
Q

La salida:

data[1][2] = 10
data[1][4] = 30
data[1][5] = 99
data[2][3] = 50
data[2][1] = 70
data[3][5] = 10
data[3][1] = 50
data[4][3] = 20
data[4][5] = 60
data[5][2] = 40
data[0][2] = 40
data[0][2] = 40

...
... (repeats "data[0][2] = 40" about 60 more times)
overflow

¿Es este un caso de peek conseguir un personaje failbit?

¿Fue útil?

Solución

peek le permite ver el siguiente carácter, que creo que en este caso es el salto de línea después de que el valor de la distancia. ya que no es Q, el bucle intenta leer otros tres valores enteros, falla, y establece el bit de error. peek, cuando hay un fallo, devuelve EOF -. por lo que nunca llega a ver la Q

Otros consejos

Pruebe lo siguiente antes de comenzar a leer desde el archivo.

sourcefile >> std::skipws;

Esto causará un espacio en blanco como salto de línea para ser ignorada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top