Su resultado variará dependiendo del tipo de terminal o programa de consola en el que se encuentre, pero sí, en la mayoría \bhay un retroceso no destructivo . Mueve el cursor hacia atrás, pero no borra lo que está allí.
Entonces, para la hello worlparte, el código genera
hola mundo
^
... (donde ^muestra dónde está el cursor) Luego genera dos \bcaracteres que mueven el cursor hacia atrás dos lugares sin borrar (en su terminal):
hola mundo
^
Tenga en cuenta que el cursor ahora está en r. Luego sale d, que sobrescribe el ry nos da:
hola wodl
^
Finalmente, genera \n, que es una nueva línea no destructiva (nuevamente, en la mayoría de las terminales, incluida aparentemente la suya), por lo que lse deja sin cambios y el cursor se mueve al comienzo de la siguiente línea.
rse reemplaza pord. La explicación aún encaja.cmd.exeycommand.comno siempre se insertan (puede usar la tecla Ins para alternar el comportamiento). Me sorprendió descubrir que Gnome Terminal en mi computadora principal * nix siempre se inserta, ni siquiera parece tener preferencia por él, y mucho menos alternar en función de la tecla Ins. Nunca lo había notado antes. Claramente, casi nunca quiero mecanografiar. :-)hola mundo ^ <= puntero a "cabezal de impresión"hola mundo ^ <= puntero a "cabezal de impresión"hola mundo ^ <= puntero a "cabezal de impresión"fuente
'\n'no tiene representación en pantalla. Lo que ya está ahí permanece igual; no reemplazado por un espacio o cualquier otra representación de carácter.Si quieres un retroceso destructivo, necesitarás algo como
es decir, un retroceso, un espacio y otro retroceso.
fuente
\bsignificará que el siguiente carácter de salida lo sobrescribirá.0x7f), estoy perplejo.No es demasiado difícil de explicar ... Esto es como escribir
hello worl, presionar la tecla de flecha izquierda dos veces, escribirdy presionar la tecla de flecha hacia abajo.Al menos, así es como infiero que su terminal está interpretando los códigos
\by\n.Redirija la salida a un archivo y apuesto a que obtendrá algo completamente diferente. Aunque puede que tenga que mirar los bytes del archivo para ver la diferencia.
[editar]
Para elaborar un poco, esto
printfemite una secuencia de bytes:,hello worl^H^Hd^Jdonde^Hes el carácter ASCII # 8 y^Jes el carácter ASCII # 10. Lo que ve en su pantalla depende de cómo su terminal interprete esos códigos de control.fuente
Use un solo retroceso después de cada carácter
printf("hello wor\bl\bd\n");fuente