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
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.
- Primero, asegúrate de estar en el directorio del proyecto:
cd ~/project
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.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.hproporciona funciones para operaciones de entrada y salida estándar comoprintf()yscanf().string.hproporciona 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:
- La instrucción
printf()muestra un mensaje pidiendo al usuario que ingrese un número. - La función
scanf()lee la entrada del usuario como una cadena y la almacena en el arreglonumber. - Usamos un bucle
forpara iterar a través de cada carácter de la cadena hasta llegar al terminador nulo ('\0'). - Dentro del bucle, verificamos si cada carácter es un punto decimal (
'.'). Si se encuentra, establecemos laflagen 1 y salimos del bucle. - Finalmente, usamos una instrucción
ifpara verificar si laflagestá 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.
Primero, guarda el archivo si aún no lo has hecho (Ctrl+S o Archivo > Guardar).
Abre una terminal en el WebIDE (si aún no está abierta).
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.
- Ahora ejecuta el programa compilado:
./main
- 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.
- 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:
- Un bucle
do-whileque permite al usuario comprobar múltiples números. - Validación de entrada para garantizar que la entrada contenga solo dígitos y como máximo un punto decimal.
- 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
abco1.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:
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.
Procesamiento de entrada del usuario: Has aprendido cómo solicitar y leer la entrada del usuario utilizando la función
scanf().Estructuras de control: Has implementado declaraciones condicionales (
if-else) y bucles (for,do-while) para controlar el flujo de tu programa.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.
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.



