2009-06-14 9 views
0

J'écris un programme qui lit des données de différents fichiers, qui sont donnés comme des chaînes d'entrée, et les stocke dans un vecteur de vecteurs. Le problème que je ne suis pas capable de déboguer la boucle qui lit des fichiers différents. J'ai fermé l'objet ifstream, effacé la chaîne en utilisant la fonction vide ... mais elle se termine quand je donne le second nom de fichier en entrée.lire des données à partir de fichiers, nom de fichier en entrée

Je copie le code pour votre lecture. C'est une fonction appelée par une autre autre fonction. Transposectr transpose une matrice.

code:

vector<vector<float> > store1,store2; 
ifstream bb; 

string my_string; 

float carrier; 
vector<float> buffer; 

cout<<"enter the file name"<<endl; 
getline(cin,my_string); 

while (my_string!="end") 
{ 

    bb.open(my_string.c_str()); 
    while (!bb.eof()) 
    { 
     bb >> carrier; 

     if (bb.peek() == '\n' || bb.eof()) 
     { 
      buffer.push_back(carrier); 
      store1.push_back(buffer); 
      buffer.clear(); 
     } 

     else 
     { 
      buffer.push_back(carrier); 
     } 


    } 

    bb.close(); 
    buffer.clear(); 
    transposectr1(store1); 
    storex.push_back(store1[1]); 
    storey.push_back(store1[0]); 
    store1.clear(); 
    my_string.empty(); 
    cout<<"done reading the file"<<endl; 
    cout<<"enter the file name"<<endl; 
    getline(cin,my_string); 
} 

Répondre

3

Je ne suis vraiment pas clair ce que vous essayez de faire. Mais j'ai un ruile d'or quand il s'agit d'utiliser istreams:

N'utilisez jamais la fonction eof()!

Il ne fait presque certainement pas ce que vous pensez qu'il fait. Au lieu de cela, vous devriez tester si une opération de lecture a réussi.

int x; 

while(in >> x) { 
    // I read something successfully 
} 

Vous pourriez aussi vouloir éviter peek() aussi. Essayez de réécrire votre code en gardant ce conseil à l'esprit.

0

Ajouter

bb.clear(); 

après la bb.close(), vous pouvez obtenir la bonne chose. bb.close() ne réinitialise pas le curseur je pense.

0

Neil Butterworth est juste

Ne jamais utiliser la fonction EOF()!

This link explique pourquoi.

+0

merci! Mais ça a marché. Il y avait un bug pour effacer le nom du fichier et j'utilise cin pour obtenir le nom du fichier maintenant. Plus tôt j'utilisais getline. Je ne sais pas pourquoi cela n'a pas fonctionné plus tôt .. Merci d'avoir répondu. Cordialement Saurabh Inde –

Questions connexes