Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: csp en 14 Septiembre 2013, 20:30 pm



Título: [EDITADO][C++] \n y endl
Publicado por: csp en 14 Septiembre 2013, 20:30 pm
Buenas,

Cuál es la diferencia entre usar \n y std:endl? Tengo entendido que hacen algo muy similar (ambos pasan el cursor a la línea siguiente), pero no logro entender la diferencia.

Muchas gracias.
Un saludo.


Título: Re: [C++] \n y endl
Publicado por: eferion en 14 Septiembre 2013, 20:42 pm
La secuencia para generar un salto de línea es algo dependiente del sistema operativo. Es decir, no es igual para Windows, Linux o Mac.

std::endl encapsula ese cambio y te proporciona la secuencia adecuada independientemente del sistema operativo sobre el que corra el programa.

\n pues te dará resultados diferentes e inesperados dependiendo de la plataforma sobre la que se ejecute tu programa.


Título: Re: [C++] \n y endl
Publicado por: csp en 14 Septiembre 2013, 21:00 pm
Muchas gracias por la aclaración eferion.

Edito:
Según entendí, las siguientes instrucciones son equivalentes:

Código
  1. std::cout << "Linea de prueba 1" << std::endl;
Código
  1. std::cout << "Linea de prueba 2\n" << std::flush;

Hay alguna manera (Quizás esté diciendo cualquier cosa), de ver el buffer para poder visualizar de manera gráfica los momentos en los cuales está vacío y cuando tiene información?

Un saludo.


Título: Re: [EDITADO][C++] \n y endl
Publicado por: Eternal Idol en 15 Octubre 2013, 10:45 am
Como ya te dijeron la segunda manera no es portable como la primera ... ¿Que es lo que queres hacer exactamente?


Título: Re: [EDITADO][C++] \n y endl
Publicado por: amchacon en 15 Octubre 2013, 14:05 pm
Como ya te dijeron la segunda manera no es portable como la primera ... ¿Que es lo que queres hacer exactamente?
Querrás decir que la primera no es portable.

Hay alguna manera (Quizás esté diciendo cualquier cosa), de ver el buffer para poder visualizar de manera gráfica los momentos en los cuales está vacío y cuando tiene información?
¿Buffer? Olvídate de esas cosas en C++.


Título: Re: [EDITADO][C++] \n y endl
Publicado por: Eternal Idol en 15 Octubre 2013, 14:22 pm
Querrás decir que la primera no es portable.

No, quise decir lo que dije. std::enld es portable y \n no.


Título: Re: [EDITADO][C++] \n y endl
Publicado por: amchacon en 15 Octubre 2013, 14:26 pm
No, quise decir lo que dije. std::enld es portable y \n no.
Entonces te referías a la primera como he dicho xD


Título: Re: [EDITADO][C++] \n y endl
Publicado por: csp en 15 Octubre 2013, 15:19 pm
Buenas,

Como std::endl aparte de hacer un salto de línea también limpia el buffer, mi duda es si hay alguna manera (Ya sea con C++, asm, o a través de un depurador) de 'ver' los valores actuales en el buffer, para visualizar de una manera un poco más gráfica el estado del mismo antes y después de usar esta instrucción.

No se si se podrá hacer o si estoy diciendo cualquier cosa, pero me quiero sacar la duda.

Muchas gracias a ambos.
Un saludo.

PD: Gracias por leer el mp EI.


Título: Re: [EDITADO][C++] \n y endl
Publicado por: Eternal Idol en 15 Octubre 2013, 15:28 pm
Entonces te referías a la primera como he dicho xD

No, lee de nuevo todo el hilo con atencion, yo respondi al ultimo mensaje de csp que precedia al mio.


Título: Re: [EDITADO][C++] \n y endl
Publicado por: eferion en 15 Octubre 2013, 15:37 pm
Buenas,

Como std::endl aparte de hacer un salto de línea también limpia el buffer, mi duda es si hay alguna manera (Ya sea con C++, asm, o a través de un depurador) de 'ver' los valores actuales en el buffer, para visualizar de una manera un poco más gráfica el estado del mismo antes y después de usar esta instrucción.

No se si se podrá hacer o si estoy diciendo cualquier cosa, pero me quiero sacar la duda.

Muchas gracias a ambos.
Un saludo.

PD: Gracias por leer el mp EI.

puedes mirar la posición de la memoria de vídeo, "sacarle una foto", ejecutar el comando, "sacar otra foto" y comparar los dos estados para comprobar las diferencias.


Título: Re: [EDITADO][C++] \n y endl
Publicado por: vangodp en 15 Octubre 2013, 23:58 pm
\n no es portable??
Es solo para win?
Como nunca programe para linu pues no lo sabia  :huh:


Título: Re: [EDITADO][C++] \n y endl
Publicado por: Eternal Idol en 16 Octubre 2013, 00:04 am
http://en.wikipedia.org/wiki/Newline


Título: Re: [EDITADO][C++] \n y endl
Publicado por: rir3760 en 16 Octubre 2013, 01:12 am
\n no es portable??
Es solo para win?
Si es portable o no depende en parte del modo del stream (texto o binario).

En modo texto no hay problema al utilizar '\n' y endl con la única diferencia que el segundo vacía el bufer correspondiente. En modo binario los caracteres se envían tal cual y ambas formas funcionaran correctamente solo si (en la implementación en cuestión) el carácter para indicar el avance de linea es '\n'.

Un saludo


Título: Re: [EDITADO][C++] \n y endl
Publicado por: csp en 24 Octubre 2013, 22:48 pm
eferion: Podrías darme una idea de como hacer algo así?


Título: Re: [EDITADO][C++] \n y endl
Publicado por: eferion en 25 Octubre 2013, 09:10 am
eferion: Podrías darme una idea de como hacer algo así?

algo como que??


Título: Re: [EDITADO][C++] \n y endl
Publicado por: csp en 25 Octubre 2013, 13:44 pm
puedes mirar la posición de la memoria de vídeo, "sacarle una foto", ejecutar el comando, "sacar otra foto" y comparar los dos estados para comprobar las diferencias.


Título: Re: [EDITADO][C++] \n y endl
Publicado por: eferion en 25 Octubre 2013, 14:03 pm
Busca códigos para sacar "capturas de pantalla".

Eso si, ten en cuenta que los sistemas operativos modernos configuran la salida de vídeo en modo gráfico y eso hace que en dicha memoria no te encuentres caracteres... sino información de pixels... no vas a poder "leer" un carácter de dicha captura salvo que utilices algún sistema de reconocimiento de imágenes.