error: operandos inválidos en expresión binaria (‘long’ y ‘double’); error de long % pow
#include <cs50.h>
#include <stdio.h>
#include <math.h>
int main(void)
{
long CardNumber = get_long ("Número de tarjeta: ");
long d5;
d5 = CardNumber % (long)pow(10, 5) / (long)pow(10, 4);
printf("Dígito 1 = %li\n", d5);
}
¿Es verdad que el operador módulo % no funciona con la función pow o hice algo mal?
Si reemplazo pow (10, 5) por el número 100000, mi código funciona. Si defino pow (10, 5) como otra variable, también funciona. Lido con números con muchos ceros y no quiero contarlos a mano cada vez, ni agregar una variable adicional.
ninguna
error: operandos inválidos para la expresión binaria (‘long’ y ‘double’)
d5 = CardNumber % pow (10, 5) / pow (10, 4);
~~~~~~~~~~ ^ ~~~~~~~~~~~</math.h></stdio.h></cs50.h>
davy.ai
Es cierto que el operador de módulo
%
no puede ser utilizado directamente con la funciónpow
porque la función devuelve un valordouble
y%
requiere dos operandos enteros. En este fragmento de código,pow(10, 5)
devuelve un valordouble
, por lo que no puede ser utilizado directamente con%
.Sin embargo, hay un par de soluciones alternativas para esto. Una forma es convertir el resultado de
pow
a un entero antes de utilizarlo con%
. Por ejemplo, puedes modificar la línea que estableced5
de la siguiente manera:Aquí, el resultado de
pow(10, 5)
se convierte along
antes de ser utilizado con%
. De manera similar, el resultado depow(10, 4)
también se convierte along
.Otra forma de manejar esto es definir una variable constante separada y utilizarla en lugar de
pow(10, 5)
. Por ejemplo:Aquí, definimos una variable constante
DIGITO_5
que representapow(10, 4)
(multiplicado por10
para la operación de módulo de cinco dígitos), por lo que puede ser utilizado directamente con%
. La segunda línea calcula el módulo de cinco dígitos y extrae el dígito que se almacenará end5
.Cualquiera de estos métodos debería funcionar correctamente con el fragmento de código que proporcionaste y evitar el error con el que te encontraste.