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í:
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!
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
Vaaaale. Ya entiendo!!!!!! std::getline no se salta los retornos de carro... Pues no tenía ni idea!!
Muchas gracias por pasaros!