c++ - son - secuencias de escape en pseudocodigo
¿Cuál es el uso de la secuencia de escape ''/ r''? (8)
Tengo un código C como este:
#include<stdio.h>
int main()
{
printf("Hey this is my first hello world /r");
return 0;
}
He usado la secuencia de escape como un experimento. Cuando ejecuto el código obtengo el resultado como:
o world
¿Por qué es eso, y cuál es el uso de /r
exactamente?
Si ejecuto el mismo código en un compilador en línea, obtengo el resultado como sigue:
Hey this is my first hello world
¿Por qué el compilador en línea produjo resultados diferentes, ignorando el /r
?
Como dijo amaud576875, la secuencia de escape significa un retorno de carro, similar a presionar la tecla Enter. Sin embargo, no estoy seguro de cómo se obtiene "o mundo"; deberías (y lo hago) obtener "mi primer mundo de saludo" y luego una nueva línea. Dependiendo del sistema operativo que esté utilizando (estoy usando Mac) es posible que desee utilizar un /n
lugar de un /r
.
El ''/ r'' significa "Carriage Return", es un vestigio de la época de las máquinas de escribir y las impresoras realmente antiguas. El mejor ejemplo está en Windows y otros sistemas operativos DOSsy, donde una nueva línea se da como "/ r / n". Estas son las instrucciones enviadas a una impresora antigua para comenzar una nueva línea: primero mueva el cabezal de impresión de regreso al principio, luego baje uno.
Los diferentes SO utilizarán otras secuencias de nueva línea. Linux y OSX simplemente usan ''/ n''. Los sistemas operativos Mac anteriores solo usan ''/ r''. Wikipedia tiene una lista más completa, pero esos son los más importantes.
¡Espero que esto ayude!
PD: En cuanto a por qué obtienes esa salida extraña ... Quizás la consola esté moviendo el "cursor" de nuevo al comienzo de la línea, y luego sobrescriba el primer bit con espacios o sumatoria.
El programa está imprimiendo "Hey this is my first hello world "
, luego está moviendo el cursor de regreso al comienzo de la línea. Cómo se verá esto en la pantalla depende de su entorno. Parece que el comienzo de la cadena está siendo sobreescrito por algo, tal vez su línea de comando.
Es bastante útil cuando se ejecuta en la plataforma Unix y necesita crear un archivo de texto que se abrirá en la plataforma DOS.
Unix utiliza ''/ n'' como su terminador de línea, y dos utiliza ''/ r / n'' como su terminador de línea, por lo que puede usarlo para crear un archivo de texto dos.
Esto es de tecnología anticuada: el estilo de máquina de escribir de moda antigua de la impresora. Había un rodillo (rodillo) que hacía avanzar el papel y un cabezal de impresión que martilleaba una llave de metal contra un tejido de tinta.
Regrese el cabezal de impresión al lado izquierdo.
/ n Avance el rodillo una línea.
Si no se emitió / n, escribiría sobre lo que estaba en una línea (usado principalmente para subrayar el texto).
Para responder la parte de tu pregunta,
¿Para qué sirve
/r
?
Muchos protocolos de Internet, como FTP, HTTP y SMTP, se especifican en términos de líneas delimitadas por retorno de carro y nueva línea. Entonces, por ejemplo, al enviar un correo electrónico, es posible que tenga un código como:
fprintf(socket, "RCPT TO: %s/r/n", recipients);
O bien, cuando un servidor FTP responde con un error de permiso denegado:
fprintf(client, "550 Permission denied/r/n");
mover el cursor al comienzo de la línea.
Los saltos de línea se manejan de manera diferente en diferentes sistemas. Algunos solo usan /n
(alimentación de línea, por ejemplo, Unix), algunos usan (por ejemplo, MacOS antes de OS X afaik) y algunos usan /r/n
(por ejemplo, Windows afaik).
/r
es un caracter de retorno de carro ; le dice a su emulador de terminal que mueva el cursor al comienzo de la línea.
El cursor es la posición donde se renderizarán los siguientes caracteres.
Por lo tanto, imprimir un /r
permite anular la línea actual del emulador de terminal.
Tom Zych calculó por qué la salida de su programa es o world
mientras que el /r
está al final de la línea y no imprime nada después de eso:
Cuando su programa sale, el shell imprime el símbolo del sistema. El terminal lo muestra donde dejó el cursor. Su programa deja el cursor al inicio de la línea, por lo que el símbolo del sistema anula parcialmente la línea que imprimió. Esto explica por qué has visto el símbolo del sistema seguido de o world
.
El compilador en línea que mencionas solo imprime el resultado sin procesar en el navegador. El navegador ignora los caracteres de control, por lo que el /r
no tiene ningún efecto.
Ver https://en.wikipedia.org/wiki/Carriage_return
Aquí hay un ejemplo de uso de /r
:
#include <stdio.h>
#include <unistd.h>
int main()
{
char chars[] = {''-'', ''//', ''|'', ''/''};
unsigned int i;
for (i = 0; ; ++i) {
printf("%c/r", chars[i % sizeof(chars)]);
fflush(stdout);
usleep(200000);
}
return 0;
}
Imprime repetidamente los caracteres -
/
|
/
en la misma posición para dar la ilusión de una rotación |
en la terminal