0
votes

Comment créer un tableau en lisant un fichier en C ++ si chaque ligne contient un entier?

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 commentaires

Vous devriez ajouter des entiers lire à std :: vecteur .


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


3 Réponses :


0
votes

Lorsque cette boucle complète: xxx pré>

le flux infilière code> a été épuisé, et il n'y a plus de données à lire. P>

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> xxx pré>

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 std :: vecteur code> au lieu d'un tableau, car il est beaucoup plus facile de travailler avec. p>

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>

int i = 0;
while (inFile >> array[i++]);


2 commentaires

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.



-1
votes

Vous pouvez lire le fichier dans une chaîne, puis fonctionner avec la chaîne au lieu du fichier xxx

et de là diviser la chaîne par les caractèresWLINE Paysez les chaînes divisées en tant qu'inTS < / p>


1 commentaires

Wow. Merci beaucoup!



0
votes

Réinitialiser FRStream avant la seconde tandis que la boucle

inFile.clear();
inFile.seekg(0, std::ios::beg);
while ( getline( inFile, line )) {
....


0 commentaires