Saltar al contenido

¿Cómo imprimir caracteres especiales explícitamente en C?

Bienvenido a nuestra web, ahora vas a encontrar la resolución de lo que buscas.

Solución:

No hay un mecanismo incorporado para hacer esto. Tienes que hacerlo manualmente, carácter por carácter. Sin embargo, las funciones en ctype.h puede ayudar. Específicamente, en la configuración regional “C”, la función isprint está garantizado para ser true para todos los caracteres gráficos en el conjunto de caracteres de ejecución básica, que es efectivamente lo mismo que todos los caracteres gráficos en ASCII de 7 bits, más espacio; y esta garantizado no ser – estar true para todos los control caracteres en ASCII de 7 bits, que incluye tabulador, retorno de carro, etc.

Aquí hay un boceto:

#include 
#include 
#include 

int main(void)

    int x;
    setlocale(LC_ALL, "C"); // (1)

    while ((x = getchar()) != EOF)
    
        unsigned int c = (unsigned int)(unsigned char)x; // (2)

        if (isprint(c) && c != '\')
            putchar(c);
        else
            printf("\x%02x", c);
    
    return 0;

esto no se escapa ' ni "pero se escapa y es sencillo ampliarlo si lo necesita.

Impresión n para U+000A, r para U+000D, etc. se deja como ejercicio. Tratar con caracteres fuera del conjunto de caracteres de ejecución básica (por ejemplo, codificación UTF-8 de U+0080 a U+10FFFF) también se deja como ejercicio.

Este programa contiene dos cosas que no son necesarias con una biblioteca C totalmente compatible con los estándares, pero en mi experiencia han sido necesarias en sistemas operativos reales. están marcados con (1) y (2).

1) Esto establece explícitamente la configuración de ‘locale’ de la forma en que es supuesto que se establecerá de forma predeterminada.

2) El valor devuelto por getchar es un int. Está supuesto ser un número en el rango representable por unsigned char (normalmente 0-255 inclusive), o el valor especial EOF (cual es no en el rango representable por unsigned char). Sin embargo, se sabe que las bibliotecas C con errores devuelven números negativos para los caracteres con el conjunto de bits más alto. Si eso sucede, el printf imprimirá (por ejemplo) xffffffa1 cuando debería haber impreso xa1. Fundición x a unsigned char y luego de vuelta a unsigned int corrige esto.

Reseñas y puntuaciones

Si haces scroll puedes encontrar las anotaciones de otros programadores, tú incluso tienes la habilidad dejar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *