Uso de \b y \r en C

4 minutos de lectura

\b y \r rara vez se utilizan en la práctica. Me acabo de enterar que no entendí bien estas dos secuencias de escape. Una prueba sencilla:

printf("foo\bbar\n");

Esperaba que saliera fobarporque \b retrocederá el cursor, y b sobrescribirá el segundo opero en su lugar genera: foobar

lo mismo es con \r:

printf("foo\rbar\n");

Yo pensé \r moverá el cursor al principio de la línea actual, por lo que bar reemplazará foopor lo que el resultado final debe ser bar. Sin embargo, en realidad genera:

foo
bar

  • ¿Dónde está la pregunta?

    – Chris

    21 de junio de 2013 a las 13:19

  • ¿En qué plataforma estás?

    – sospecharnos

    21 de junio de 2013 a las 13:20

  • @Chris que hace \b y \r hacer exactamente?

    – YuHao

    21 de junio de 2013 a las 13:20


  • stackoverflow.com/questions/6792812/…

    – ctn

    21 de junio de 2013 a las 13:21

  • @YuHao No hacen nada. Son solo personajes. Pero cualquier cosa en la que escribas esos caracteres podría actuar de cierta manera cuando recibe esos caracteres. por ejemplo, si escribe esos caracteres en un archivo, el carácter terminará en el archivo. Si lo escribe en una terminal/consola, la terminal podría borrar un carácter cuando vea \b Algunas terminales harían eso, otras no.

    – nos

    21 de junio de 2013 a las 13:22


Los caracteres se enviarán así al dispositivo de salida subyacente (en su caso, probablemente un emulador de terminal).

Depende de la implementación de la terminal cómo se muestran realmente esos caracteres. Por ejemplo, una campana (\a) podría activar un pitido en algunos terminales, un parpadeo de la pantalla en otros, o se ignorará por completo. Todo depende de cómo esté configurado el terminal.

  • ¿sabes cómo configurar el mío para que no ignore la campana (\ a)?

    – mf_

    21 de junio de 2013 a las 13:42

Los personajes son exactamente como están documentados: \b equivale a un código de carácter de 0x08 y \r Equivalente a 0x0d. Lo que varía es cómo reacciona su sistema operativo a esos caracteres. Cuando las pantallas intentaban emular un teletipo antiguo, esas acciones estaban estandarizadas, pero son menos útiles en entornos modernos y la compatibilidad no está garantizada.

  • El estándar no dice cuáles son los códigos de caracteres. \b sera 0x08 sólo si 0x08 corresponde al carácter de retroceso en el juego de caracteres de ejecución (que es cierto en ASCII y Unicode y otros juegos de caracteres comunes). Sin embargo, si su conjunto de caracteres de ejecución es EBCDIC, entonces \b se asignará a \0x16 (si puedo confiar en las tablas de caracteres que estoy encontrando en línea).

    – Adrián McCarthy

    21 de junio de 2013 a las 17:55

La interpretación de los caracteres de retroceso y retorno de carro se deja en manos del software que utilice para la visualización. Un emulador de terminal, al mostrar \b movería el cursor un paso hacia atrás, y al mostrar \r al principio de la línea. Si imprime estos caracteres en otro lugar, como un archivo de texto, el software puede elegir. para hacer otra cosa

En cuanto al significado de cada carácter descrito en C Primer Plus, lo que esperaba es una respuesta ‘correcta’. Debería ser cierto para algunas arquitecturas de computadora y compiladores, pero desafortunadamente no para el suyo.

Escribí un programa C simple para repetir su prueba y obtuve la respuesta ‘correcta’. Estaba usando Mac OS y gcc.
ingrese la descripción de la imagen aquí

Además, tengo mucha curiosidad por saber cuál es el compilador que estabas usando. 🙂

avatar de usuario
moh k

He experimentado muchos de los caracteres de escape de barra invertida. \n que es un nuevo avance de línea que se puede colocar en cualquier lugar para generar el efecto. Una cosa importante para recordar al usar este carácter es que el sistema operativo de la máquina que estamos usando puede afectar la salida. Como ejemplo, imprimí un montón de caracteres de escape y mostré el resultado de la siguiente manera para probar que el sistema operativo afectará la salida.

Código:

#include <stdio.h>
int main(void){
    printf("Hello World!");
    printf("Goodbye \a");
    printf("Hi \b");
    printf("Yo\f");
    printf("What? \t");
    printf("pewpew");
    return 0;
}

1648541528 774 Uso de b y r en C
1648541529 15 Uso de b y r en C

  • Los códigos deben ser texto, puede insertar imágenes para la salida que no se pueden publicar aquí, obviamente, ya que no se mostrarán como lo haría en las máquinas locales.

    – Morse

    26 de abril de 2018 a las 23:24


avatar de usuario
sepideha

En diferentes compiladores, los caracteres de escape de barra invertida se comportan de manera diferente.

En MAC OS con sonido metálico \b quita el último carácter de la consola como esperabas.

#include <iostream>
int main ()
{
  std::cout << "Test";
  std::cout << "\b";
  std::cout << "\n";
  return 0;
}

producción:

 Tes

  • Los códigos deben ser texto, puede insertar imágenes para la salida que no se pueden publicar aquí, obviamente, ya que no se mostrarán como lo haría en las máquinas locales.

    – Morse

    26 de abril de 2018 a las 23:24


¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad