En esta página

Ejercicio 04: ft_is_negative

Muestra «N» si n es negativo y «P» si es positivo o nulo.

DatoValor
Carpetaex04/
Archivoft_is_negative.c
Prototipovoid ft_is_negative(int n);
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 'N' si n es negativo y 'P' si es positivo o cero.
** El cero entra en el else a proposito: el enunciado lo cuenta como positivo.
*/
void    ft_is_negative(int n)
{
    if (n < 0)
        put_char('N');
    else
        put_char('P');
}

Línea por línea

#include <unistd.h>

Declara write, la única función de librería permitida.

static void put_char(char c)

Copia privada de ft_putchar, como en los ejercicios anteriores. Escribe un byte en la salida estándar.

void ft_is_negative(int n)

ParteSignificado
voidno devuelve nada
ft_is_negativeel nombre que pide el subject
(int n)recibe un entero

El parámetro es int y no char porque el enunciado habla de cualquier entero, incluidos los negativos grandes.

if (n < 0)

Una decisión. n < 0 es verdadero solo para los negativos: -1, -42, -2147483648. El cero no entra aquí, y eso es justo lo que pide el enunciado.

put_char('N');

Se ejecuta solo cuando n es negativo.

else

Todo lo que no entró en el if. Como el if atrapa los negativos, el else significa «cero o positivo». No hace falta escribir n >= 0: sería repetir la misma información.

put_char('P');

Se ejecuta para 0 y para cualquier positivo.

Por qué no hay return

La función es void: termina sola al acabar el bloque. Un return ; al final sería correcto pero redundante; en este repositorio se omite cuando no aclara nada.

Casos límite

LlamadaQué muestraPor qué
ft_is_negative(-2147483648)Nes negativo
ft_is_negative(-1)Nes negativo
ft_is_negative(0)Pel cero entra en el else
ft_is_negative(1)Pes positivo
ft_is_negative(2147483647)Pes positivo
DetalleDecisión
Ceromuestra P, como pide el subject
INT_MINmuestra N sin desbordar: aquí no se cambia el signo de nada
Salto de líneano se imprime
Negativosno hay que contar cuántos: basta con el signo

Errores típicos

Mensaje o síntomaCausaSolución
el cero muestra Nusaste n <= 0cambia a n < 0
todos muestran Pcomparaste con = en vez de <if (n < 0)
no compilaif (n < 0) sin paréntesisañádelos
-Wunused-parameterno usaste núsalo en la condición

Comprobarlo

cat > /tmp/main.c <<'EOF'
void    ft_is_negative(int n);

int main(void)
{
    ft_is_negative(-2147483648);
    ft_is_negative(-1);
    ft_is_negative(0);
    ft_is_negative(1);
    ft_is_negative(2147483647);
    return (0);
}
EOF
cc -Wall -Wextra -Werror ex04/ft_is_negative.c /tmp/main.c -o /tmp/ex04
/tmp/ex04

Salida:

NNPPP

Descargar