2010-01-05 6 views
1

J'essaye d'écrire une fonction qui lit des lignes individuelles à partir d'un fichier txt et les stocke dans un tableau de chaînes. La fonction fonctionne correctement sauf lorsqu'elle est lue dans des lignes vides. Exemple:Les flux C++ ne lisent pas la ligne vide

Fonction

ifstream flinput("somefile.txt") 
string line; 

while(getline(flinput, line)) { 
    //Add line to array 

Le problème est de savoir si le fichier texte ressemble donc.

Line1 Some Text blar blar blar 
\n 
Line3 Some Text blar blar blar 
\n 
Line5 Some Text blar blar blar 

La matrice finit par ressembler à ceci.

array[0] = "Line1 Some Text blar blar blar" 
array[1] = "Line3 Some Text blar blar blar" 
array[2] = "Line5 Some Text blar blar blar" 

Lorsque cela devrait ressembler à ceci.

array[0] = "Line1 Some Text blar blar blar" 
array[1] = "" 
array[2] = "Line3 Some Text blar blar blar" 
array[3] = "" 
array[4] = "Line5 Some Text blar blar blar" 

Qu'est-ce que je fais mal?

Merci

Répondre

3

De la documentation getline ...

Si le délimiteur se trouve, il est extrait et mis au rebut, à savoir qu'il ne sont pas stockées et l'opération d'entrée suivante commencera après. Si vous ne voulez pas que ce caractère soit extrait, vous pouvez utiliser member get à la place.

Votre code fait exactement ce qu'il est censé faire. Vous devrez analyser manuellement les choses avec Get comme le suggère la documentation si vous souhaitez enregistrer le \ n.

+0

Une méthode plus simple peut être de vérifier une chaîne vide avant de placer dans le tableau. Si la chaîne est vide, ajoutez une chaîne de "\ n" au tableau. –

0

Votre code fonctionne pour moi avec gcc 4.3.2 sur un système Linux. Je pense que ça devrait.

0

Il serait plus simple d'utiliser un iterator, here's un exemple:

Questions connexes