Frage

Eine eher kurze Frage ... Ich kann nicht herausfinden, warum diese Schleife nie ... endet

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

Die Eingabedatei

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

Der Ausgang:

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

Ist das ein Fall von Peek einen failbit Charakter bekommen?

War es hilfreich?

Lösung

Peek können Sie das nächste Zeichen zu sehen, die ich in diesem Fall denke, die Newline nach dem Entfernungswert ist. da es nicht Q ist, versucht, die Schleife noch drei ganzzahlige Werte zu lesen, fehlschlägt, und setzt das Fehlerbit. Peek, wenn es einen Fehler, kehrt EOF -., so dass Sie nie die Q zu sehen bekommen

Andere Tipps

Versuchen Sie, die folgenden, bevor sie aus der Datei zu lesen beginnen.

sourcefile >> std::skipws;

Es wird dazu führen, Leerzeichen wie Zeilenumbruch ignoriert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top