2017-04-22 1 views
-1

La seconde ne fonctionne pas. J'ai essayé filestr.clear()/flush() et d'autres sans résultat. Si je commente le premier alors que tout va bien, mais j'ai besoin du nombre d'objets. Quelqu'un aide, s'il vous plaîtgetline ne fonctionne pas au deuxième appel

while (std::getline(filestr, line)) { 
      if (line.find("<rect") != std::string::npos) count_rect++; 
     } 
     rect = new Rectangle[count_rect]; 
    while (std::getline(filestr, line1)) { 
     //code 
    } 
+0

Le code est mal formaté. Vous semblez penser que la 2ème boucle while est * imbriquée *, mais en fait elle est exécutée * après * la première boucle. – zett42

Répondre

0

La première boucle extrait de lignes filestr jusqu'à ce qu'il n'y a plus rien à lire.

Il est difficile de comprendre pourquoi vous pensez qu'une deuxième boucle trouvera plus de lignes. Si la seconde boucle avait une entrée à lire, la première boucle l'aurait déjà lue.

Je ne peux pas suggérer un correctif en toute confiance, car vous ne nous avez pas dit ce que votre code est censé faire à la place. Cependant, en supposant filestr est un flux de fichiers, vous voudrez peut-être déplacer le lire le curseur au début après votre clear opération:

filestr.clear();    // clear any state flags 
filestr.seekg(0, ios::beg); // move cursor to start so we read everything again 

Si filestr est mal nommé et représente en fait un flux non-fichier, vous pouvez Ne faites pas cela et vous aurez besoin d'une nouvelle approche de votre algorithme de pré-numérisation. En outre, vous devez éviter new en faveur de std::vector. Et vous devriez indenter votre code correctement au lieu de faire un gâchis.