Hola
Tengo una consulta con un problema de una guia de informatica I.
El codigo es el siguiente
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned char c=5;
double b=12;
int a=346,r;
r=a/b%c;
printf("%d",r);
return 0;
}
Segun la precedencia, primero viene * , luego la / y por ultimo %.
Hice los calculos y me da 3.
El tema es que la respuesta correcta, al probarlo en el compilador es un error de compilacion que dice "invalid operand to binary % (have "double and "int").
El tema es que si yo saco el "%c" me permite compilar y ejecutar el programa con normalidad.
Ahora si yo pongo el %c da el error de compilacion pero no entiendo ya que a/b es un entero/double...basicamente no entiendo de donde sale ese error de compilacion.
El módulo debe ser entero
Cita de: engel lex en 12 Diciembre 2016, 00:32 AM
El módulo debe ser entero
Gracias, o sea, si a/b=28... y tengo el unsigned char c=5...lo que vos decis es que a/b se puede hacer sin ningun problema ...me queda 28%5(char)...osea el compilador no toma el numero 5, sino que solo acepta variables de tipo int?.
no entendi nada de tu ultima explicación... lo que uise decir es que los operados involucrados en el modulo deben ser de tipo entero o más simples
int%int
si uno de los 2 es float falla
Lo que quiere decir engel lex es que b es un double y esto hace promocionar a a a double, por tanto el resultado de la división es un valor double. Este resultado, un double, pasa a ser operando del módulo, pero el operador módulo en C solo acepta enteros.
para evitar esto errores podemos obligar a nuestra variables para que no importe o que pase sea int
ej:
int a;
float sum, div;
sum=2.45;div=45.1;
a=(int) sum/div;
printf("%d",a);
la convercion informacion aqui
http://c.conclase.net/curso/?cap=009