Pregunta:
¿Ayuda en Lenguaje C (Al ingresar N° decimales me diga...)?
anonymous
2011-06-12 16:31:16 UTC
Necesito una ayuda aquí, yo ya tengo una calculadora con su estructura lista y corriendo, pero necesito que cuando se ingrese numero con decimales, poner un printf diciendo que no puede colocar numero decimales, solamente entero.
Como haria eso, e estado pensando y no e conseguido la forma de hacerlo, seria con while, a if ?!
Si alguien me puede ayudar se lo agredeceria mucho !!
Gracias de antemano a todas las persona que me puedan ayudar...
Tres respuestas:
Yisuscraist
2011-06-12 18:34:36 UTC
Otra estrategia seria capturar todos los numero como float, almacenar su parte entera, y si la parte entera es igual al numero original, entonces es un numero entero, sino, tendrá decimales.



Es decir, capturar un numero como 2.367

Almacenar su parte entera como float (2.000)

Y comprobar si (2.000==2.367)



Esto se puede hacer con las conversiones de tipo. Si pones un tipo valido de C entre parentesis delante de una expresion de otro tipo distinto, el contenido de esa expresion se convertira al tipo especificado (si es posible).

En el caso de convertir un float a int, como int no admite decimales, estos se borran.



float n = 10.6;

int x = (int) n; // x contiene el valor de n convertido al tipo int y sin decimales (10)

n = (float) x; //ahora n contiene el numero 10.0000000000...







Esta es una funcion que podrias usar:



#include



short esEntero(float n){

float parteEntera = (float)(int)n; //valor de n se convierte a int, y luego otra vez a float

return (parteEntera == n); //true si n es entero, false si es decimal.

}





main(){

float n;

scanf("%f",&n);

if(esEntero(n))

printf("%d es entero",(int)n);

else

printf("%f tiene decimales",n);

}





Y así da igual que el usuario ingrese un 2, un 2.0 ó un 6.345, como los capturas en tipo float, puedes diferenciarlos, da igual como los escriba.

Si haces tus calculos con tipos int, reconviertes el valor de las variables float con (int) y listo
keasal
2016-12-21 09:55:23 UTC
Es raro lo que dices de manejar los numeros en Hexa para operarlos ya que las variables numericas en C guardan un numero (que se muestra en decimal por defecto) osea el hexadecimal es solo una forma de representar el contenido almacenado, no quiere decir que se almacene como tal. pero bueno suponiendo tu caso y que tengas una variable: int effect = num//Lo que va de 00 a FF; //l. a. muestras en decimal haciendo printf("el numero en decimal es %d",effect); Ahora si lo tienes como un vector char de dos letras "00" o "FF", debes usar algun artificio matematico como conversion de bases a decimal char * effect = //El resultado expresado como dos caracteres de 00- a FF int valor1, valor2; valor1= getValueFromChar(*effect); //paso el char[0] valor2= getValueFromChar(*(effect+one million)); //paso los valores char[one million] int convertido = (valor1*sixteen ) + ( valor2); printf("El valor en decimal es %d", convertido); //usa of usa esta funcion para convertir el caracter al valor de l. a. cifra int getValueFromChar(char digit) int effect; change (digit) { case 'A': effect=10; wreck; case 'B': effect=11; wreck; case 'C': effect=12; wreck; case 'D': effect=13; wreck; case 'E': effect=14; wreck; case 'F': effect=15; wreck; default: if ((digit>= 0) && (digit<= 9)) effect =((int)digit) - forty 8; //Ya que el 0 en ASCII es forty 8 //Y el 9, es fifty seven-forty 8 =9 } return effect; } Saludos
C/G
2011-06-12 16:41:44 UTC
Podrías tratar a los números enteros como una cadena de caracteres.

En vez de definirlos como enteros definilos como string.

Luego tenes que evaluar si lo que ingresó el usuario en la cadena tiene algún punto o como separadora decimal y si todos los demás caracteres son números.

Si esta todo bien tenes que convertir la cadena en un entero, de lo contrario mostrar un mensaje de error.



Esa seria la estrategia.



Lo que tenes que averiguar es como transformar un string a int. Y como recorrer una cadena de string para avaluar si hay algún punto.

Esto lo podes encontrar fácil en internet.



Saludos.


Este contenido se publicó originalmente en Y! Answers, un sitio web de preguntas y respuestas que se cerró en 2021.
Loading...