es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Convertidor de C a ASCII printf Entero extra

Tratando de crear un convertidor C simple de char a ASCII, pero el resultado imprime “10” después de cada printf. ¿Alguna idea para resolver esto?
Compilador: mingw64/gcc
Fuente:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main() {
    char argc;
    printf("Ingrese ASCII: ");
    do {
        scanf("%c", &argc);
        printf("%d\n", argc);
    } while (argc != 'Z');
}

Salida:
$ ./ascii.exe
Ingrese ASCII: A
65
10
S
83
10
D
68
10
V
86
10
X
88
10
Z
90
</string.h></stdlib.h></stdio.h>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema se debe al caracter de nueva línea (\n) que queda en el búfer de entrada después de la llamada scanf. Cuando scanf lee el carácter Z, también lee el caracter de nueva línea del búfer, que luego se imprime como 10 en la sentencia printf dentro del bucle.

    Para solucionarlo, puede agregar un espacio antes del especificador de formato %c en la llamada a scanf. Esto le indica a scanf que omita cualquier caracter de espacio en blanco en el búfer de entrada antes de leer el caracter, incluido el caracter de nueva línea.

    Aquí está el código actualizado:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    void main() {
        char argc;
        printf("Ingrese un carácter ASCII: ");
        do {
            scanf(" %c", &argc); // note el espacio antes del %c
            printf("%d\n", argc);
        } while (argc != 'Z');
    }
    

    Esto debería dar la salida esperada sin el extra 10 después de cada caracter.</string.h></stdlib.h></stdio.h>

Comments are closed.