Foro de elhacker.net

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

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6. unsigned char c=5;
  7. double b=12;
  8. int a=346,r;
  9. r=a/b%c;
  10. printf("%d",r);
  11.    return 0;
  12. }
  13.  

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