en C ++, je devrais lire un fichier dans lequel chaque ligne contient un entier et transférer tous les entiers en une matrice. J'ai essayé de compter les lignes avec la fonction getline (). Et créé une matrice cependant lorsque je compte les lignes, elle consomme et si j'utilise la fonction GetLine (), cela ne fonctionnera pas. Que devrais-je faire? Merci.
ifstream inFile( fileName );
if ( inFile.is_open() ) {
int size = 0;
string line;
while( getline(inFile, line))
size++;
int* array = new int [ size ];
while ( getline( inFile, line )) {
....
}
}
The code does not enter the second while.
3 Réponses :
Lorsque cette boucle complète: le flux Une option est d'ouvrir à nouveau le fichier, puis de le lire. Cependant, cela est inutile, car vous pouvez garder une trace des chiffres que vous avez lus à partir du fichier la première fois: p> Vous avez tous les numéros dans un conteneur et vous N'ayez pas besoin de lire à nouveau dans le fichier. p> Notez que j'utilise si vous devez absolument em> utiliser un tableau, vous pouvez lire le fichier une fois pour déterminer le nombre d'entiers dans le fichier: P> infilière code> a été épuisé, et il n'y a plus de données à lire. P> std :: vecteur code> au lieu d'un tableau, car il est beaucoup plus facile de travailler avec. p> int i = 0;
while (inFile >> array[i++]);
Il n'y a pas d'inquiétude avec l'efficacité. Cependant, je ne peux pas utiliser de vecteur dans cette affectation. Y a-t-il une autre façon que je puisse utiliser votre idée?
@ Mustafayaşar a ajouté une solution à l'aide de tableaux également.
Vous pouvez lire le fichier dans une chaîne, puis fonctionner avec la chaîne au lieu du fichier et de là diviser la chaîne par les caractèresWLINE Paysez les chaînes divisées en tant qu'inTS < / p> p>
Wow. Merci beaucoup!
Réinitialiser FRStream avant la seconde tandis que la boucle
inFile.clear();
inFile.seekg(0, std::ios::beg);
while ( getline( inFile, line )) {
....
Vous devriez ajouter des entiers lire à
std :: vecteur code>.Veuillez partager le code que vous décrivez.
Modifiez la question, n'utilisez pas de commentaires. Aussi, assurez-vous de poster un exemple de reproductible minimal