Consulta sobre ejercicio basico en C?

Iniciado por palacio29, 11 Diciembre 2016, 23:19 PM

0 Miembros y 1 Visitante están viendo este tema.

palacio29

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.

engel lex

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

palacio29

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?.

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

MAFUS

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.

jessec01

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
"originalidad en todo "