Determinar si un número es entero o de punto flotante en C

CCBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, escribiremos un programa en C que identifique si un número ingresado por el usuario es un entero o un número de punto flotante. Este es un concepto fundamental en la programación, donde diferentes tipos de datos tienen diferentes requisitos de memoria y comportamientos.

Nos centraremos en detectar la presencia de un punto decimal en la entrada para determinar si el número es un valor de punto flotante. Este laboratorio te introduce al manejo básico de cadenas en C, el procesamiento de entrada del usuario y la lógica condicional.

Al final de este laboratorio, entenderás cómo:

  • Leer la entrada del usuario como una cadena en C
  • Buscar caracteres específicos dentro de una cadena
  • Utilizar lógica condicional para tomar decisiones basadas en la entrada

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/BasicsGroup(["Basics"]) c(("C")) -.-> c/FileHandlingGroup(["File Handling"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/CompoundTypesGroup(["Compound Types"]) c/BasicsGroup -.-> c/variables("Variables") c/BasicsGroup -.-> c/operators("Operators") c/ControlFlowGroup -.-> c/if_else("If...Else") c/ControlFlowGroup -.-> c/for_loop("For Loop") c/ControlFlowGroup -.-> c/while_loop("While Loop") c/CompoundTypesGroup -.-> c/arrays("Arrays") c/FileHandlingGroup -.-> c/create_files("Create Files") c/UserInteractionGroup -.-> c/user_input("User Input") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/variables -.-> lab-123267{{"Determinar si un número es entero o de punto flotante en C"}} c/operators -.-> lab-123267{{"Determinar si un número es entero o de punto flotante en C"}} c/if_else -.-> lab-123267{{"Determinar si un número es entero o de punto flotante en C"}} c/for_loop -.-> lab-123267{{"Determinar si un número es entero o de punto flotante en C"}} c/while_loop -.-> lab-123267{{"Determinar si un número es entero o de punto flotante en C"}} c/arrays -.-> lab-123267{{"Determinar si un número es entero o de punto flotante en C"}} c/create_files -.-> lab-123267{{"Determinar si un número es entero o de punto flotante en C"}} c/user_input -.-> lab-123267{{"Determinar si un número es entero o de punto flotante en C"}} c/output -.-> lab-123267{{"Determinar si un número es entero o de punto flotante en C"}} end

Crear y Abrir el Archivo del Programa en C

Comencemos creando un nuevo archivo en C para nuestro programa. Lo llamaremos main.c y lo colocaremos en el directorio del proyecto.

  1. Primero, asegúrate de estar en el directorio del proyecto:
cd ~/project
  1. Ahora, en el WebIDE, haz clic en el menú "File" (Archivo), selecciona "New File" (Nuevo archivo) y llámalo main.c. Alternativamente, puedes usar el icono de "New File" (Nuevo archivo) en la barra lateral del explorador de archivos.

  2. El editor de archivos se abrirá automáticamente. Agreguemos los archivos de encabezado necesarios a nuestro programa:

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

Estos archivos de encabezado son esenciales para nuestro programa:

  • stdio.h proporciona funciones para operaciones de entrada y salida estándar como printf() y scanf().
  • string.h proporciona funciones para manipulación de cadenas, aunque en este programa simple, lo usaremos principalmente para calcular la longitud de la cadena.

Observa que no incluimos conio.h como se mencionó en la plantilla original. Esto se debe a que conio.h no es una biblioteca estándar de C y no está disponible en muchos sistemas, incluyendo nuestro entorno Ubuntu.

Agregar la Función Principal y Declarar Variables

Ahora que tenemos nuestros archivos de encabezado, agreguemos la función main() y declaremos las variables que necesitaremos para nuestro programa.

Agrega el siguiente código a tu archivo main.c:

int main() {
    char number[20];  // Array to store the input number as a string
    int flag = 0;     // Flag to track if a decimal point is found (0 = not found, 1 = found)
    int i;            // Loop counter variable

    // Program will continue here...

    return 0;
}

Entendamos estas variables:

  • number[20]: Este es un arreglo de caracteres (cadena) que almacenará la entrada del usuario. Hemos aumentado el tamaño a 20 caracteres para poder manejar números más grandes.
  • flag: Esta variable entera actuará como una bandera booleana. Si encontramos un punto decimal en la entrada, estableceremos este valor en 1.
  • i: Una simple variable contador para nuestro bucle.

La función main() es el punto de entrada de nuestro programa en C. Todo el código que escribamos estará dentro de esta función. La instrucción return 0 al final indica que el programa se ejecutó correctamente.

Tu archivo ahora debería verse así:

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

int main() {
    char number[20];  // Array to store the input number as a string
    int flag = 0;     // Flag to track if a decimal point is found (0 = not found, 1 = found)
    int i;            // Loop counter variable

    // Program will continue here...

    return 0;
}

Implementar la Lógica del Programa

Ahora, agreguemos el código restante para leer la entrada del usuario y determinar si el número es un entero o un número de punto flotante.

Reemplaza el comentario "Program will continue here..." (El programa continuará aquí...) con el siguiente código:

    // Prompt the user to enter a number
    printf("Enter a number: ");
    scanf("%s", number);

    // Check each character in the number string for a decimal point
    for(i = 0; number[i] != '\0'; i++) {
        if(number[i] == '.') {
            flag = 1;  // Set flag to 1 if decimal point is found
            break;
        }
    }

    // Display the result based on the flag value
    if(flag) {
        printf("The entered number is a floating point number.\n");
    } else {
        printf("The entered number is an integer number.\n");
    }

Examinemos lo que hace este código:

  1. La instrucción printf() muestra un mensaje pidiendo al usuario que ingrese un número.
  2. La función scanf() lee la entrada del usuario como una cadena y la almacena en el arreglo number.
  3. Usamos un bucle for para iterar a través de cada carácter de la cadena hasta llegar al terminador nulo ('\0').
  4. Dentro del bucle, verificamos si cada carácter es un punto decimal ('.'). Si se encuentra, establecemos la flag en 1 y salimos del bucle.
  5. Finalmente, usamos una instrucción if para verificar si la flag está establecida. Si lo está, informamos al usuario que el número es un número de punto flotante; de lo contrario, es un entero.

Tu programa completo ahora debería verse así:

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

int main() {
    char number[20];  // Array to store the input number as a string
    int flag = 0;     // Flag to track if a decimal point is found (0 = not found, 1 = found)
    int i;            // Loop counter variable

    // Prompt the user to enter a number
    printf("Enter a number: ");
    scanf("%s", number);

    // Check each character in the number string for a decimal point
    for(i = 0; number[i] != '\0'; i++) {
        if(number[i] == '.') {
            flag = 1;  // Set flag to 1 if decimal point is found
            break;
        }
    }

    // Display the result based on the flag value
    if(flag) {
        printf("The entered number is a floating point number.\n");
    } else {
        printf("The entered number is an integer number.\n");
    }

    return 0;
}

Compilar y Ejecutar el Programa

Ahora que hemos escrito nuestro programa, compilémoslo y ejecutémoslo para verlo en acción.

  1. Primero, guarda el archivo si aún no lo has hecho (Ctrl+S o Archivo > Guardar).

  2. Abre una terminal en el WebIDE (si aún no está abierta).

  3. Navega hasta el directorio del proyecto y compila el programa utilizando el compilador GCC:

cd ~/project
gcc main.c -o main

El comando gcc compila nuestro archivo fuente en C, y la opción -o main especifica que el ejecutable resultante debe llamarse main.

  1. Ahora ejecuta el programa compilado:
./main
  1. Cuando se te solicite, ingresa un número. Prueba con un entero primero, como 42:
Enter a number: 42

Deberías ver la salida:

The entered number is an integer number.
  1. Ejecuta el programa de nuevo y prueba con un número de punto flotante como 3.14:
./main
Enter a number: 3.14

Deberías ver la salida:

The entered number is a floating point number.

El programa identifica correctamente los enteros y los números de punto flotante según la presencia de un punto decimal en la entrada.

Mejorar el Programa

Vamos a mejorar nuestro programa para hacerlo más amigable con el usuario y más robusto. Agregaremos un bucle para que el usuario pueda comprobar múltiples números sin reiniciar el programa, y también agregaremos validación de entrada.

Actualiza tu archivo main.c con el siguiente código:

#include <stdio.h>
#include <string.h>
#include <ctype.h>  // For isdigit function

int main() {
    char number[20];
    int flag, i;
    char choice;

    do {
        flag = 0;  // Reset flag for each iteration

        // Prompt the user to enter a number
        printf("\nEnter a number: ");
        scanf("%s", number);

        // Input validation - check if the input contains only digits and at most one decimal point
        int valid = 1;
        int decimal_count = 0;

        for(i = 0; number[i] != '\0'; i++) {
            if(number[i] == '.') {
                decimal_count++;
                if(decimal_count > 1) {
                    valid = 0;
                    break;
                }
            } else if(!isdigit(number[i])) {
                valid = 0;
                break;
            }
        }

        if(!valid) {
            printf("Invalid input! Please enter a valid number.\n");
            continue;
        }

        // Check if the number is integer or float
        for(i = 0; number[i] != '\0'; i++) {
            if(number[i] == '.') {
                flag = 1;
                break;
            }
        }

        // Display the result
        if(flag) {
            printf("The entered number is a floating point number.\n");
        } else {
            printf("The entered number is an integer number.\n");
        }

        // Ask if the user wants to continue
        printf("\nDo you want to check another number? (y/n): ");
        scanf(" %c", &choice);

    } while(choice == 'y' || choice == 'Y');

    printf("\nThank you for using the program!\n");
    return 0;
}

Esta versión mejorada incluye:

  1. Un bucle do-while que permite al usuario comprobar múltiples números.
  2. Validación de entrada para garantizar que la entrada contenga solo dígitos y como máximo un punto decimal.
  3. Una interfaz más amigable con mensajes y retroalimentación más claros.

Compila y ejecuta esta versión mejorada:

cd ~/project
gcc main.c -o main
./main

Pruébalo con varias entradas, incluyendo:

  • Números enteros como 42
  • Números de punto flotante como 3.14
  • Entradas no válidas como abc o 1.2.3

El programa debe manejar adecuadamente todos estos casos y permitirte continuar comprobando números hasta que decidas salir.

Resumen

En este laboratorio, has creado con éxito un programa en C que determina si un número ingresado por el usuario es un entero o un número de punto flotante. Aquí están los conceptos clave que has aprendido:

  1. Manejo de cadenas en C: Has utilizado arreglos de caracteres para almacenar y procesar datos de cadena, iterando a través de cada carácter para verificar sus propiedades.

  2. Procesamiento de entrada del usuario: Has aprendido cómo solicitar y leer la entrada del usuario utilizando la función scanf().

  3. Estructuras de control: Has implementado declaraciones condicionales (if-else) y bucles (for, do-while) para controlar el flujo de tu programa.

  4. Validación de entrada: En la versión mejorada, has agregado comprobaciones para garantizar que la entrada del usuario sea un número válido.

  5. Mejora del programa: Has mejorado el programa básico agregando características como un bucle para el usuario y validación de entrada, haciéndolo más robusto y amigable con el usuario.

Estos conceptos son fundamentales para muchas tareas de programación y servirán como una base sólida mientras continúes aprendiendo programación en C. La capacidad de distinguir entre diferentes tipos de datos es particularmente importante en lenguajes fuertemente tipados como C, donde diferentes tipos de datos tienen diferentes asignaciones de memoria y comportamientos.