(Consulta) Error muy extraño con la salida a consola en C++

Iniciado por class_OpenGL, 10 Octubre 2017, 18:29 PM

0 Miembros y 1 Visitante están viendo este tema.

class_OpenGL

Hola, muy buenas. Estoy desarrollando para la facultad una clase llamada Cronologia y otra como FechaHistorica, y tengo problemas con la salida del FechaHistorica. En esta clase, he definido una sobrecarga de operador amigo así:

Código (cpp) [Seleccionar]
std::ostream& operator<<(std::ostream &os, const FechaHistorica &fecha) {
    // PRUEBAS
    for(int i = 0; i < (int)fecha.acontecimientos.size(); i++)
        os << fecha.acontecimientos[i] << std::endl;
   
    os << "________________________________" << std::endl;
   
    for(int i = 0; i < (int)fecha.acontecimientos.size(); i++) {
        for(int j = 0; j < (int)fecha.acontecimientos[i].size(); j++)
            os << '(' <<(int)fecha.acontecimientos[i][j] << ',' << fecha.acontecimientos[i][j] << ") ";
       
        os << std::endl << "___" << std::endl;
    }
   
    // CÓDIGO REAL
    os << fecha.año;
   
    for(const std::string &elemento : fecha.acontecimientos)
        os << FechaHistorica::TERMINADOR << elemento;
   
    return os;
}


La parte etiquetada como 'PRUEBAS' significa que no pertenece al código final. FechaHistorica tiene un año (int) y un conjunto de acontecimientos (std::vector de std::string). Pues bien, cuando yo ejecuto ese operador obtengo la siguiente salida:

CitarApriori algorithm developed by Rakesh Agrawal and Ramakrishnan Srikant
Nada en especial
Algo
________________________________
(65,A) (112,p) (114,r) (105,i) (111,o) (114,r) (105,i) (32, ) (97,a) (108,l) (103,g) (111,o) (114,r) (105,i) (116,t) (104,h) (109,m) (32, ) (100,d) (101,e) (118,v) (101,e) (108,l) (111,o) (112,p) (101,e) (100,d) (32, ) (98,b) (121,y) (32, ) (82,R) (97,a) (107,k) (101,e) (115,s) (104,h) (32, ) (65,A) (103,g) (114,r) (97,a) (119,w) (97,a) (108,l) (32, ) (97,a) (110,n) (100,d) (32, ) (82,R) (97,a) (109,m) (97,a) (107,k) (114,r) (105,i) (115,s) (104,)  (110,n) (97,a) (110,n) (32, ) (83,S) (114,r) (105,i) (107,k) (97,a) (110,n) (116,t) (13,
___
(78,N) (97,a) (100,d) (97,a) (32, ) (101,e) (110,n) (32, ) (101,e) (115,s) (112,p) (101,e) (99,c) (105,i) (97,a) (108,l)
___
(65,A) (108,l) (103,g) (111,o)
___
#Nada en especial#Algo developed by Rakesh Agrawal and Ramakrishnan Srikant

Como podeis ver, el vector de string contiene los string

  • Apriori algorithm developed by Rakesh Agrawal and Ramakrishnan Srikant
  • Nada en especial
  • Algo

Después he impreso el valor numérico de cada carácter.

El ERROR está en la siguiente parte:
Citar#Nada en especial#Algo developed by Rakesh Agrawal and Ramakrishnan Srikant

En el código, tengo que se imprima primero el año, y luego el conjunto de sucesos, pero por alguna razón, parece ser que la posición del cursor (columna) vuelve a 0, y sobreescribe los datos de la línea ya impresos. Espero haberme explicado bien.

He probado en cada iteración a hacer un flush de 'os', pero no ha resultado.

Muchas gracias!

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

class_OpenGL

Mira que imprimí los caracteres por si había alguno raro... No me fijé en el carriage character. Es muy raro, los datos se han leído usando la clase std::ifstream, ¿no debería saltarse estos caracteres cuando se lee sin activar la lectura binaria?

Muchas gracias

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

class_OpenGL

Vaaaale. Ya entiendo!!!!!! std::getline no se salta los retornos de carro... Pues no tenía ni idea!!

Muchas gracias por pasaros!

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL