Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: palacio29 en 11 Diciembre 2016, 23:19 PM

Título: Consulta sobre ejercicio basico en C?
Publicado por: palacio29 en 11 Diciembre 2016, 23:19 PM
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.
Título: Re: Consulta sobre ejercicio basico en C?
Publicado por: engel lex en 12 Diciembre 2016, 00:32 AM
El módulo debe ser entero
Título: Re: Consulta sobre ejercicio basico en C?
Publicado por: palacio29 en 12 Diciembre 2016, 14:46 PM
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?.
Título: Re: Consulta sobre ejercicio basico en C?
Publicado por: engel lex en 12 Diciembre 2016, 14:55 PM
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
Título: Re: Consulta sobre ejercicio basico en C?
Publicado por: MAFUS en 12 Diciembre 2016, 20:29 PM
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.
Título: Re: Consulta sobre ejercicio basico en C?
Publicado por: jessec01 en 14 Diciembre 2016, 07:45 AM
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