Pregunta

Estoy escribiendo un programa que utiliza imprime un volcado hexadecimal de su entrada.Sin embargo, estoy ejecutando en problemas al saltos de línea, tabulaciones, etc se pasan y destruyendo mi el formato de salida.

¿Cómo puedo utilizar printf (o cout supongo) para imprimir ' ' en lugar de imprimir un real salto de línea?¿Necesito hacer algún manual de análisis para esto?

EDITAR:Estoy recibiendo mis datos de forma dinámica, no solo a la que yo soy de carne de unos, sino de todos los símbolos.Por ejemplo, este es mi instrucción printf:

printf("%c", theChar);

¿Cómo puedo hacer esta impresión cuando una nueva línea se pasa como theChar pero todavía lo hacen de impresión de texto normal cuando theChar es válido carácter imprimible?

¿Fue útil?

Solución

Imprimir "\\ n" - "\\" produce "\" y luego "n" es reconocido como un símbolo ordinario. Para obtener más información, consulte aquí .

Otros consejos

La función printchar() continuación se imprimirá algunos caracteres como "especial", e imprimir el código octal para los personajes fuera de rango (a la Emacs), pero imprimir caracteres normales lo contrario. También he tomado la libertad de tener '\n' imprimir una int real después para hacer su salida más legible. También tenga en cuenta que utilizo un main en el bucle en unsigned char sólo para poder iterar sobre toda la gama de <=>. En el uso que usted probablemente sólo tener un <=> que lea a partir del conjunto de datos.

#include <stdio.h>

static void printchar(unsigned char theChar) {

    switch (theChar) {

        case '\n':
            printf("\\n\n");
            break;
        case '\r':
            printf("\\r");
            break;
        case '\t':
            printf("\\t");
            break;
        default:
            if ((theChar < 0x20) || (theChar > 0x7f)) {
                printf("\\%03o", (unsigned char)theChar);
            } else {
                printf("%c", theChar);
            }
        break;
   }
}

int main(int argc, char** argv) {

    int theChar;

    (void)argc;
    (void)argv;

    for (theChar = 0x00; theChar <= 0xff; theChar++) {
        printchar((unsigned char)theChar);
    }
    printf("\n");
}

Sólo tiene que utilizar "\\ n" (dos barras)

Puede escapar de la barra invertida para hacer que imprima sólo una barra invertida normales: "\\n".

Editar: Si vas a tener que hacer un poco de análisis manual. Sin embargo el código para hacerlo, no sería más que una búsqueda y reemplazo.

Si desea asegurarse de que no se imprimen los caracteres no imprimibles, a continuación, puede utilizar las funciones de ctype.h como isprint:

if( isprint( theChar ) )
  printf( "%c", theChar )
else
  switch( theChar )
  {
  case '\n':
     printf( "\\n" );
     break;
  ... repeat for other interesting control characters ...
  default:
     printf( "\\0%hho", theChar ); // print octal representation of character.
     break;
  }
printf("\\n");

Además de los ejemplos proporcionados por otras personas, usted debe buscar en las funciones de clasificación de caracteres como isprint () y iscntrl () . Estos pueden usarse para detectar los caracteres que son o no son imprimibles sin tener que codificar valores hexadecimales de una tabla ascii.

En C / C ++, el carácter '\' se reserva como el carácter de escape. Así que cada vez que desee imprimir en realidad un '\', debe introducir '\'. Así que para imprimir la 'n \' valor real que imprimiría la siguiente:

printf("\\n");

Sólo tiene que usar Cadena :: sustituir para reemplazar los caracteres problemáticos antes se llama a printf.

Se puede envolver el printf a hacer algo como esto:

void printfNeat(char* str)
{
    string tidyString(str);
    tidyString.replace("\n", "\\n");
    printf(tidyString);
}

... y acaba de añadir el suplemento sustituir a las declaraciones de librarse de otros caracteres no deseados.

[Editar] o si desea utilizar argumentos, intente lo siguiente:

void printfNeat(char* str, ...)
{
    va_list argList;
    va_start(argList, msg);

    string tidyString(str);
    tidyString.replace("\n", "\\n");
    vprintf(tidyString, argList);

    va_end(argList);
}

Como de C++11 también se puede utilizar cruda cadenas

std::printf(R"(\n)");

todo dentro de la R"( y )" va a ser impreso, literalmente.las secuencias de escape no será procesada.

Hay tres soluciones para este problema:

Solución 1: Cada símbolo, número, alfabeto tiene su propio valor ASCII. El valor ASCII de '\' como 92 y 'n' como 110. se almacenan Los valores inmediatos (Números (ASCII)) en dos variables enteras. Durante la impresión, el especificador de formato% c (Personaje), se utiliza.

void main() { 
    int i=92, j=110; 
    clrscr(); 
    printf("%c%c", i, j);
    getch();
}

Pruébelo en su software de programación C ...

Solución 2:

Los programas de obras. Pero creo que éste no es justo ... En la pantalla de salida, escriba la entrada como \ n ... recibirá otra \ n ..

void main() {
  char a[10];
  gets(a);
  printf("\n\n\n\n");
  puts(a);
  getch(); 
}

Pruebe los programas

Solución 3: Ya se ha dicho anteriormente utilizan \ n

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top