En esta página

Ejercicio 02: ft_print_reverse_alphabet

Muestra el alfabeto en minúsculas en una sola línea, en orden decreciente, empezando por la letra «z».

DatoValor
Carpetaex02/
Archivoft_print_reverse_alphabet.c
Prototipovoid ft_print_reverse_alphabet(void);
Funciones autorizadassolo write

Hecho con amor para Laura, por Bogdan.

El archivo

#include <unistd.h>

/*
** Copia local de ft_putchar: el enunciado solo permite entregar este archivo.
** Escribe un unico caracter en la salida estandar.
*/
static void put_char(char c)
{
    write(1, &c, 1);
}

/*
** Muestra el alfabeto en minusculas en una sola linea, de la 'z' a la 'a'.
** Es el mismo recorrido que ft_print_alphabet, pero hacia atras.
*/
void    ft_print_reverse_alphabet(void)
{
    char    letter;

    letter = 'z';
    while (letter >= 'a')
    {
        put_char(letter);
        letter--;
    }
}

Línea por línea

#include <unistd.h>

Declara write, la única función de librería que permite el enunciado. La explicación está en el ejercicio 00.

static void put_char(char c)

Copia privada de ft_putchar. static la encierra en este archivo: cada ejercicio se entrega solo y no puede depender de otro.

void ft_print_reverse_alphabet(void)

La firma exacta que pide el subject: no devuelve nada y no recibe parámetros.

char letter;

La caja que guarda la letra actual. Todavía no tiene valor; la línea siguiente se lo da.

letter = 'z';

El recorrido empieza por la última letra. Comillas simples: 'z' es un carácter, "z" sería un string.

while (letter >= 'a')

Repite mientras letter no baje de 'a'. La condición se evalúa antes de cada vuelta, así que cuando letter vale el carácter anterior a 'a', el bucle sale sin imprimirlo.

Vueltaletterletter >= 'a'Qué hace
1'z'verdaderoimprime y resta
2'y'verdaderoimprime y resta
…………
26'a'verdaderoimprime y resta
—`falsosale del bucle

put_char(letter);

Imprime la letra actual. El parámetro es una copia: cambiar c dentro de put_char no tocaría letter.

letter--;

Es letter = letter - 1;. Baja a la letra anterior. Si lo olvidas, el bucle no termina nunca.

Las tres diferencias con el ejercicio 01

PiezaEjercicio 01Ejercicio 02
Valor inicial'a''z'
Condiciónletter <= 'z'letter >= 'a'
Avanceletter++letter--

Todo lo demás es idéntico. Las letras siguen siendo consecutivas en ASCII, así que restar uno baja a la anterior sin ninguna tabla.

Salida esperada

zyxwvutsrqponmlkjihgfedcba

Casos límite

DetalleDecisión
Salto de línea finalno se imprime
letter >= 'a'incluye la 'a'; con > te dejarías la primera
Carácter anterior a 'a'nunca se escribe: la condición corta antes
26 vueltasexactas, igual que en el ejercicio 01

Errores típicos

Mensaje o síntomaCausaSolución
falta la ausaste letter > 'a'cambia a >=
el programa no terminaolvidaste letter--añádelo en el cuerpo
imprime basura antes de zinicializaste con letter = 0empieza en 'z'
no compilamezclaste "z" con charcomillas simples

Comprobarlo

cat > /tmp/main.c <<'EOF'
void    ft_print_reverse_alphabet(void);

int main(void)
{
    ft_print_reverse_alphabet();
    return (0);
}
EOF
cc -Wall -Wextra -Werror ex02/ft_print_reverse_alphabet.c /tmp/main.c -o /tmp/ex02
/tmp/ex02

Descargar