Ifstream boucle infinie (il ne semble jamais trouver le marqueur à la lecture d'arrêt)
-
28-09-2019 - |
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?
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