2012-12-23 4 views
-2

J'utilise dque pour pousser certains éléments que je lis d'un fichier à l'arrière de la deque mais quand je les imprime de l'avant je reçois seulement le dernier élémentdeque imprime l'élément précédent au lieu de l'avant()

fgets(line,100,file); 
    qu.push_back(line); 
    fgets(line,100,file); 
    qu.push_back(line); 
    fgets(line,100,file); 
    qu.push_back(line); 
    fgets(line,100,file); 
    qu.push_back(line); 

    while(!qu.empty()) 
      { 
       puts(qu.front()); 
       qu.pop_front(); 
      } 

entrée exemple

a 
b 
c 
d 

sortie

d 
d 
d 
d 

Merci

+1

débugger votre code Donc, puis fixez-le! –

+0

Merci pour votre commentaire utile !!! si je ne l'avais pas je n'aurais pas demandé – Roola

+0

Quoi qu'il en soit, ce n'est pas un "débogage mon code pour moi" application de crowdsourcing. –

Répondre

2

Vous avez pas fourni les déclarations de line et qu, mais je devine qu'ils sont

char line[100]; 
std::dequeue<char*> qu; 

Cela signifie qu stocke des pointeurs vers un tampon externe (à qu) avec des personnages en elle. Dans votre programme, il vous suffit d'un seul tampon (line), dont l'adresse est poussé à plusieurs reprises dans qu, mais dont le contenu seront écrasés à chaque appel fgets.

Pendant que vous apprenez C++, essayez de rester loin de pointeurs autant que vous le pouvez. Ainsi, au lieu d'utiliser char* pour les chaînes, utilisez std::string:

std::string line; 
std::deque<std::string> qu; 

getline(std::cin, line); 
qu.push_back(line); 
getline(std::cin, line); 
qu.push_back(line); 
getline(std::cin, line); 
qu.push_back(line); 
getline(std::cin, line); 
qu.push_back(line); 

while(!qu.empty()) 
{ 
    std::cout << qu.front() << std::endl; 
    qu.pop_front(); 
} 
+0

Merci pour l'aide, Je comprends le problème maintenant votre réponse l'a résolu. – Roola

Questions connexes