Question

Une question assez rapide ... Je ne peux pas comprendre pourquoi cette boucle se termine jamais ...

#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;
}

Le fichier d'entrée

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 sortie:

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

Est-ce un cas de coup d'oeil obtenir un caractère failbit?

Était-ce utile?

La solution

coup d'oeil vous permet de voir le caractère suivant, que je pense que dans ce cas est la nouvelle ligne après la valeur de distance. car il est non Q, la boucle tente de lire trois autres valeurs de nombre entier, ne parvient pas, et définit le bit d'erreur. coup d'oeil, quand il y a un échec, les retours EOF -. de sorte que vous ne pouvez voir le Q

Autres conseils

Essayez ce qui suit avant de commencer à lire à partir du fichier.

sourcefile >> std::skipws;

Il causera des espaces tels que saut de ligne à ignorer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top