sirve saltos que para linea hace espacio codigo c console newline getc

c - que - saltos de linea /n



Leyendo / r(retorno de carro) vs / n(nueva lĂ­nea) desde la consola con getc? (5)

Estoy escribiendo una función que básicamente espera que el usuario presione "enter" y luego haga algo. Lo que he encontrado que funciona cuando se prueba es el siguiente:

#include <stdio.h> int main() { int x = getc(stdin); if (x == ''/n'') { printf("carriage return"); printf("/n"); } else { printf("missed it"); printf("/n"); } }

La pregunta que tengo y lo que intenté al principio fue hacer: if (x == ''/r'') pero en las pruebas, el programa no me atrapó al entrar. El ''/n'' parece corresponder a que golpee enter desde la consola. ¿Alguien puede explicar la diferencia? Además, para verificarlo, escríbelo como if... == "/n" significara el literal de la cadena de caracteres? es decir, el usuario literalmente tendría que ingresar "/n" desde la consola, ¿correcto?


El ''/ n'' es el "Avance de línea" y ''/ r'' es el retorno de carro. Los diferentes sistemas operativos manejarán las nuevas líneas de una manera diferente, como

Windows

Espera que una nueva línea sea una combinación de dos caracteres, ''/ r / n''.

Linux / Unix y Mac OS moderno

Utiliza un solo ''/ n'' para una nueva línea.

Mac OS clásico

Utiliza un solo ''/ r'' para una nueva línea.

Básicamente, usaría if (x == ''/n'') como lo utilizan actualmente todos los sistemas operativos modernos.


El uso de gets() abre a explotaciones de desbordamiento de búfer y, en consecuencia, posiblemente ataques de código de shell. Debes usar fgets() y pasar un tamaño de búfer.


Hay varios niveles de abstracciones al representar una nueva línea: el tiempo de ejecución del lenguaje de programación, el editor de texto y el sistema operativo. CR (retorno de carro) y LF (avance de línea) son dos caracteres de control que se definen en ASCII. Algunas otras codificaciones de caracteres pueden también definir un carácter de "nueva línea". La tecla Intro en cualquier teclado transmite un significado de "al principio de la siguiente línea". El teclado decide cómo asignar la tecla Intro a sus caracteres de control o caracteres correspondientes. Algunos teclados también diferencian las teclas Intro y Retorno; deje que la tecla Intro sea nueva línea y que la tecla Retorno sea retorno de carro. En un teclado ANSI estándar, solo hay una tecla Intro, que se asigna a un carácter de retorno de carro (13) en ASCII. Este es el contenido real que el dispositivo envía al sistema operativo. Sin embargo, diferentes sistemas operativos deciden interpretar la tecla Intro de manera diferente. Por lo tanto, en un sistema similar a Unix, cualquier retorno de carro se traduce a un cargador de alimentación de línea (10 en ASCII) antes de entregarlo al programa que recibe la entrada. Y en Windows, un CR se traduce en dos caracteres: un CR seguido de un LF. Sin embargo, puede configurar el flujo de entrada para que sea el modo sin procesar, en cuyo caso el programa obtiene lo que el teclado realmente envía. Ahora el editor entra en juego. Cuando el editor recibe un CR de stdin en modo raw, sabe que el CR corresponde a la tecla Intro en el teclado (supuesto sobre el teclado) y se supone que muestra una nueva línea en la pantalla. En el modo sin formato, debe llamar a la llamada del sistema de escritura para generar un CR + LF. Si el flujo de salida no está en el modo sin formato, el editor de texto debe generar la secuencia específica del sistema operativo, como LF en linux.

Finalmente, el tiempo de ejecución del idioma también puede interpretar la nueva línea a su manera. Por ejemplo, el estándar C dice que cuando se escribe un archivo en modo de texto, ''/ n'' se traduce de manera transparente a la secuencia de nueva línea nativa utilizada por el sistema, que puede tener más de un carácter. Al leer en modo de texto, la secuencia de nueva línea nativa se traduce de nuevo a ''/ n''. En el modo binario, no se realiza ninguna traducción, y la representación interna producida por ''/ n'' se emite directamente. Tenga en cuenta que ''/ n'' y ''/ r'' son caracteres específicos del idioma que representan a LF y CR, respectivamente, que son populares en los lenguajes similares a C. Pero no todos los idiomas tienen que usar esta notación.

Para su segunda pregunta, "/ n" es ''/ n'' seguido de un terminador ''/ 0''. No hay forma de ingresar un ''/ 0'' desde la consola.


También recuerda que si getc 25 caracteres y Enter, el primer getc no volverá hasta que getc 25 caracteres y getc Enter. Leer un personaje en el momento en que se escribe requiere un código específico de la plataforma. Por consiguiente, puede que sea mejor que lea la línea completa realizando fgets en una cadena, recortando la nueva línea y procesando la línea de entrada como un todo.


/n es el carácter de nueva línea, mientras que /r es el retorno de carro. Se diferencian en lo que los usa. Windows usa /r/n para indicar que se presionó la tecla Intro, mientras que Linux y Unix usan /n para indicar que se presionó la tecla Intro.

Por lo tanto, siempre uso /n porque es usado por todos; y if (x == ''/n'') es la forma correcta de probar la igualdad de caracteres.