C – ¿Cómo verificar si el número es entero o flotante? [closed]

6 minutos de lectura

C ¿Como verificar si el numero es entero o
tdbr

Ejercicio 30
Escriba un programa que lea el valor flotante desarrollado como extensión decimal y

  • Si es entero, dice que es entero.
  • por otro lado, lo redondea a entero y escribe el resultado.

Recuerde sobre el control de datos

Aquí está el nuevo sin este mensaje sobre el tipo de número entero.

#include <stdio.h>
#include <math.h>

int main(){
    double x;              //the argument of f(x)
    printf("Program demands x");
    printf("\nand writes the rounded value\n");
    printf("Author: xXx\n\n");
                          //loading data
    printf("Write x in float type in decimal extension  "); // after many tries, program is not rounding the value
    if (scanf("%lf",&x)!=1 || getchar()!='\n'){
        printf("Wrong data.\n");
        printf("\nEnd of program.\n");
        return 0;     
    }
    double round( double x );
    printf( "Rounded value is = %lf\n", x);
    printf("\nEnd of program.\n");
    return 0;   
}

  • Tu pregunta no tiene sentido, en cuanto a que uses scanf, debe conocer el tipo que se está asignando. Entonces, a partir de esa lógica, ya conoces el tipo. Corríjame si me equivoco, pero creo que su pregunta probablemente sea para determinar si un número ingresado por el usuario (de una cadena) es un número entero o flotante.

    – jrd1

    19 de noviembre de 2013 a las 9:55


  • Si los comentarios no son relevantes, simplemente puede eliminarlos de la pregunta.

    – Tom Fenech

    19 de noviembre de 2013 a las 9:56

  • Sí, pero aquí está el problema. si uso escanear Necesito declarar qué tipo quiero. Entonces, ¿cómo declarar el tipo del que no estoy seguro porque depende del número que ingresará el usuario?

    – tdbr

    19 de noviembre de 2013 a las 10:01

  • ¿El problema es determinar si la entrada tiene una forma de “punto flotante” (tiene un punto decimal o un exponente) o tiene un valor no entero? “1.0” tiene forma de punto flotante pero es un número entero. “1/2” no tiene forma de punto flotante pero no es un número entero. ¿El programa debe ser sensible a la configuración regional (reconocer “,” o “.” como un punto decimal según la configuración del usuario)?

    –Eric Postpischil

    19 de noviembre de 2013 a las 11:29

  • @EricPostpischil sí, eso es todo

    – tdbr

    19 de noviembre de 2013 a las 11:55

C ¿Como verificar si el numero es entero o
David Heffernan

Sugeriría lo siguiente:

  1. Leer el número en una variable de punto flotante, valdecir.
  2. Pon la parte entera de val en una variable int, truncateddecir.
  3. Comprobar si o no val y truncated son iguales.

La función podría verse así:

bool isInteger(double val)
{
    int truncated = (int)val;
    return (val == truncated);
}

Es probable que desee agregar algunas comprobaciones de cordura en caso de que val está fuera del rango de valores que se pueden almacenar en un int.

Tenga en cuenta que asumo que desea utilizar la definición de un matemático para un número entero. Por ejemplo, este código consideraría "0.0" como especificando un entero.

  • pero ¿y si la entrada es 123.0?

    – perreal

    19 de noviembre de 2013 a las 10:02

  • En C, es un flotador 🙂 Sin embargo, veo tu punto.

    – perreal

    19 de noviembre de 2013 a las 10:06

  • Bueno no, 123.0 claramente no es un número entero, hay un punto decimal y una fracción decimal. Supongo que es posible que desee afirmar que está dentro de cierta tolerancia de un número entero.

    – Marca de alto rendimiento

    19 de noviembre de 2013 a las 10:14

  • @HighPerformanceMark En el ámbito de las matemáticas, estoy razonablemente seguro de que 123.0 es un número entero. Tu comentario sobre la tolerancia me hace reír.

    –David Heffernan

    19 de noviembre de 2013 a las 10:15


  • Cuidado caballeros, todavía estamos discutiendo ordenadoresno matemáticas. No todos los enteros posibles se pueden almacenar en un int entero — o, para el caso, en un float o double. El OP podría querer aclarar lo que quiere decir con ‘entero’. (También, 123.0 es una representación perfectamente razonable para 123.00000001 😉

    – Jongware

    19 de noviembre de 2013 a las 10:51

1646961247 992 C ¿Como verificar si el numero es entero o
usuario694733

Mantenlo simple:

  1. Leer la entrada como una cadena en un búfer fgets(buffer, BUFFER_SIZE, stdin);

  2. Utilizar sscanf para intentar leer enteros:

    int i, r, n;
    r = sscanf(buffer, "%d%n", &i, &n);
    if(r == 1 && n == strlen(buffer)) {
        // is integer
    }
    

    La verificación de longitud adicional aquí es para asegurarse de que todos los caracteres se evalúen y se numeren como 12.3 no será aceptado como 12.

  3. Si el paso anterior falló, intente leer el punto flotante:

    double dbl;
    r = sscanf(buffer, "%lf", &dbl);
    if(r == 1) {
            // is double
    }
    

  • +1 Creo que esta es una buena respuesta.

    –David Heffernan

    19 de noviembre de 2013 a las 11:13

  • bueno, todavía no es mi nivel, creo que sí, tal vez una solución más fácil.

    – tdbr

    19 de noviembre de 2013 a las 18:11

  • Creo que sería mejor poner un espacio antes de la %n para permitir que se salte el espacio final. Luego puede verificar si el carácter al final es un byte nulo; si es así, había un espacio en blanco inicial (posiblemente vacío), un número y un espacio en blanco final (posiblemente vacío). usaría el %n en ambas pruebas.

    –Jonathan Leffler

    2 de julio de 2017 a las 23:13

1646961247 61 C ¿Como verificar si el numero es entero o
perreal

#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main() {
    char buffer[128], *p = buffer; 
    int   isint;
    fgets(buffer, sizeof buffer, stdin);
    if (p[0] == '+' || p[0] == '-')
      p++;
    isint = strlen(p) - 1;
    for (; *p && *p != '\n' && isint; p++) {
        isint = isdigit(*p);
    }   
    if (isint)
        printf("Woaaa\n");
    return 0;
}

Y una versión ligeramente más limpia basada en la comparación de la cadena de entrada y la cadena creada usando el entero escaneado:

#include <stdio.h>
#include <string.h>
int main() {
    char buffer[128], tostr[128];
    int d;
    fgets(buffer, sizeof buffer, stdin);
    buffer[strlen(buffer) - 1 ] = 0;
    sscanf(buffer, "%d", &d);
    sprintf(tostr, "%d", d); 
    if (!strcmp(buffer, tostr)) {
        printf("Woa\n");
    }
    return 0;
}

  • Encuentro que la falta de texto explicativo aquí es decepcionante.

    –David Heffernan

    19 de noviembre de 2013 a las 10:22

1646961248 260 C ¿Como verificar si el numero es entero o
Rayo

Sugeriría que pueda obtener la entrada por cadena y verificar si es flotante o entero.

por ejemplo:

#define IS_FLOAT = 1;
#define IS_INT = 2;
int main()
{
    char tempString[20];

    scanf("%s", tempString);

    if(checkType(tempString)==IS_INT)
        printf("This is integer\n");    
    else if(checkType(tempString)==IS_FLOAT)
        printf("This is Float");
    else
        printf("undifined");
}

int checkType(char *input)
{
    short int isInt=0;//we use int as a boolean value;
    short int isFloat=0;
    short int isUndifined=0;
    int count;

    for(count = 0 ; input[count ]!='\0'; count++)
    {
        if(isdigit(input[count]))//you should include ctype.h at the beginning of this program
            isInt=1;
        else if(input[count] == '.')
            isFloat=1;
        else
            return -1;//some character that neither int nor '.' char.
    }
    if(isInt == 1 && isFloat ==1)
        return IS_FLOAT;
    else if(isInt == 1 && isFloat ==0)
        return IS_INT;
    else
        return -1;//illegal format
}

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad