Skip to content

Instantly share code, notes, and snippets.

@phaya
Last active December 22, 2015 11:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save phaya/ee27e97e2e6508f4f8af to your computer and use it in GitHub Desktop.
Save phaya/ee27e97e2e6508f4f8af to your computer and use it in GitHub Desktop.
¿Por qué en el siguiente programa la conversión a segundos es errónea para 100 años?
#include <stdio.h>
int main()
{
int age;
printf("How old are you?\n");
scanf ("%d", &age);
printf("You are over %d seconds old\n", age*365*24*60*60);
return 0;
}
@javierdarna
Copy link

Creo que es porque para 100 años se ha excedido la capacidad de representación de un int, pero no estoy seguro...

@phaya
Copy link
Author

phaya commented Sep 30, 2013

¡Muy bien! Pero con un ligeros matices, primero la representación de un int varía según la plataforma. En los laboratorios ocupan 4 bytes (32 bits) Si se emplearan más bytes puede que no diera problemas. Para comprobar cuantos byes ocupa un entero lo más rápido es printf("%d", sizeof(int). Segundo, en este caso el problema no viene por int age si no por el resultado de la operación age*365*24*60*60 que es lo que desborda. Fijaros que especificador de formato se emplea en printf¿cómo solucionarías el código para obtener la salida correcta que para 100 años es 3153600000?

@anacidoncha
Copy link

Creo que habría que poner como formato %lf tanto en el printf como en el scanf y declarar age como double

@phaya
Copy link
Author

phaya commented Sep 30, 2013

¡Bien! Esa solución funciona y arregla el problema, pero se puede hacer sin tocar el tipo de datos de age, y manteniendo la salida del programa como un entero, en vez de un float ¿qué otros especificadores de formato se pueden utilizar con números enteros?

@anacidoncha
Copy link

Vale, creo que sería utilizando %u pues al no tener signo digamos que ampliamos el rango al doble (el de los positivos). No sé si me he explicado.

@phaya
Copy link
Author

phaya commented Oct 1, 2013

Tocado y hundido

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment