Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: class_OpenGL en 10 Octubre 2017, 18:29 PM

Título: (Consulta) Error muy extraño con la salida a consola en C++
Publicado por: class_OpenGL en 10 Octubre 2017, 18:29 PM
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

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!
Título: Re: (Consulta) Error muy extraño con la salida a consola en C++
Publicado por: class_OpenGL en 10 Octubre 2017, 19:31 PM
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
Título: Re: (Consulta) Error muy extraño con la salida a consola en C++
Publicado por: class_OpenGL en 10 Octubre 2017, 19:36 PM
Vaaaale. Ya entiendo!!!!!! std::getline no se salta los retornos de carro... Pues no tenía ni idea!!

Muchas gracias por pasaros!