Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@parzibyte
Created August 9, 2020 04:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save parzibyte/91c794af13a12b2b8f351e674c285f03 to your computer and use it in GitHub Desktop.
Save parzibyte/91c794af13a12b2b8f351e674c285f03 to your computer and use it in GitHub Desktop.
/*
____ _____ _ _ _
| _ \ | __ \ (_) | | |
| |_) |_ _ | |__) |_ _ _ __ _____| |__ _ _| |_ ___
| _ <| | | | | ___/ _` | '__|_ / | '_ \| | | | __/ _ \
| |_) | |_| | | | | (_| | | / /| | |_) | |_| | || __/
|____/ \__, | |_| \__,_|_| /___|_|_.__/ \__, |\__\___|
__/ | __/ |
|___/ |___/
____________________________________
/ Si necesitas ayuda, contáctame en \
\ https://parzibyte.me /
------------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
Creado por Parzibyte (https://parzibyte.me). Este encabezado debe mantenerse intacto,
excepto si este es un proyecto de un estudiante.
*/
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<stdlib.h>
#define LONGITUD_CADENA 1000
int esFlotanteValido(char *cadena) {
int longitud = strlen(cadena);
// Quitar espacios, saltos de línea, etcétera
while (longitud > 0 && isspace(cadena[longitud - 1]))
longitud--;
if (longitud <= 0) return 0;
int i;
int haEncontradoElPunto = 0;
for (i = 0; i < longitud; ++i) {
// En caso de que sea un guión, y que no esté al inicio, no es válido
if (cadena[i] == '-' && i > 0) {
return 0;
}
// El punto solo puede aparecer una vez
if (cadena[i] == '.') {
// Si ya lo ha encontrado antes, entonces no es válido
if (haEncontradoElPunto) {
return 0;
} else {
haEncontradoElPunto = 1;
}
}
// Si no es dígito, tampoco es válido
if (!isdigit(cadena[i]) && cadena[i] != '-' && cadena[i] != '.') {
return 0;
}
}
return 1;
}
int esEnteroValido(char cadena[LONGITUD_CADENA]) {
int longitud = strlen(cadena);
// Quitar espacios, saltos de línea, etcétera
while (longitud > 0 && isspace(cadena[longitud - 1]))
longitud--;
if (longitud <= 0) return 0;
int i;
for (i = 0; i < longitud; ++i) {
// En caso de que sea un guión, y que no esté al inicio, no es válido
if (cadena[i] == '-' && i > 0) {
return 0;
}
// Si no es dígito, tampoco es válido
if (!isdigit(cadena[i]) && cadena[i] != '-') {
return 0;
}
}
return 1;
}
int main() {
char numeroFlotanteComoCadena[LONGITUD_CADENA];
// Leer el número como cadena
printf("Ingresa un número flotante: ");
fgets(numeroFlotanteComoCadena, sizeof(numeroFlotanteComoCadena), stdin);
if (!esFlotanteValido(numeroFlotanteComoCadena)) {
printf("Número no válido");
return 0;
}
// Si llegamos aquí, el flotante es válido
float numeroFlotante = strtof(numeroFlotanteComoCadena, NULL);
printf("El flotante es: %0.2f y si le sumamos 10 es %0.2f", numeroFlotante, numeroFlotante + 10);
char numeroEnteroComoCadena[LONGITUD_CADENA];
// Leer el número como cadena
printf("\nIngresa un número entero: ");
fgets(numeroEnteroComoCadena, sizeof(numeroEnteroComoCadena), stdin);
if (!esEnteroValido(numeroEnteroComoCadena)) {
printf("Número no válido");
return 0;
}
// Si es válido, lo convertimos a entero
int numeroEntero = strtol(numeroEnteroComoCadena, NULL, 10); // <- El 10 es la base del número para strtol
printf("El entero es: %d y si le sumamos 10 es %d", numeroEntero, numeroEntero + 10);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment