Debes usar los tipos definidos en:
#include <stdint.h>
Y los especificadores de formato definidos en:
#include <inttypes.h>
Aquí una referencia de stdint.hAquí una referencia de inttypes.hCódigo de ejemplo:
#include <stdint.h>
#include <inttypes.h>
#include <stdio.h>
int main( int argc , char **argv)
{
uint64_t numero = 0;
printf("Introduzca un numero:");
//Aquí se usa %llu , por que en la referencia pone.
//#define SCNu64 'llu'
//La u es para los sin signo , la i y la d para los enteros con signo
//Aquí se usa %llu , por que en la referencia pone.
//#define PRIu64 'llu'
//La u es para los sin signo , la i y la d para los enteros con signo
printf("Tu numero es %llu", numero
);
return 0;
}
En la referencia de los especificadores de formato:
- PRI significa PRINTF, es decir , que eso es para imprimir el numero , que lleve i o d , depende de la que quieras usar.
- SCN significa SCANF , es decir, que sirve para introducir el numero , y lo mismo que arriba , puedes usar i o d.
Para lo de los archivos , pone esto en el código fuente de inttypes.h :
00074 *// The fprintf() macros for signed integers are:
00075 *// PRIdN PRIdLEASTN PRIdFASTN PRIdMAX PRIdPTR
00076 *// PRIiN PRIiLEASTN PRIiFASTN PRIiMAX PRIiPTR
00077 *//
00078 *// The fprintf() macros for unsigned integers are:
00079 *// PRIoN PRIoLEASTN PRIoFASTN PRIoMAX PRIoPTR
00080 *// PRIuN PRIuLEASTN PRIuFASTN PRIuMAX PRIuPTR
00081 *// PRIxN PRIxLEASTN PRIxFASTN PRIxMAX PRIxPTR
00082 *// PRIXN PRIXLEASTN PRIXFASTN PRIXMAX PRIXPTR
00083 *//
00084 *// The fscanf() macros for signed integers are:
00085 *// SCNdN SCNdLEASTN SCNdFASTN SCNdMAX SCNdPTR
00086 *// SCNiN SCNiLEASTN SCNiFASTN SCNiMAX SCNiPTR
00087 *//
00088 *// The fscanf() macros for unsigned integers are:
00089 *// SCNoN SCNoLEASTN SCNoFASTN SCNoMAX SCNoPTR
00090 *// SCNuN SCNuLEASTN SCNuFASTN SCNuMAX SCNuPTR
00091 *// SCNxN SCNxLEASTN SCNxFASTN SCNxMAX SCNxPTR
Si quieres hacerlo con archivos te dejo este ejemplo:
#include <stdint.h>
#include <inttypes.h>
#include <stdio.h>
int main( int argc , char **argv)
{
uint64_t numero = 0;
FILE * archivo;
archivo
= fopen("numero.txt","r"); // Abrimos un archivo para leerlo que debe contener el número. /* The fscanf() macros for unsigned integers are:
SCNoN SCNoLEASTN SCNoFASTN SCNoMAX SCNoPTR
SCNuN SCNuLEASTN SCNuFASTN SCNuMAX SCNuPTR
SCNxN SCNxLEASTN SCNxFASTN SCNxMAX SCNxPTR
*/
//Nosotros vamos a usar SCNu64 , N se sustituye por uno de los numeros de bits.
fscanf(archivo
, "%llu", &numero
); printf("El numero del archivo es %llu", numero
); return 0;
}
Si necesitas usar más de 64 bits , tendrás que recurrir a una librería externa a las estándares, aunque también es muy portable, es GMP , si quieres compilarla algún día, este verano puse un tutorial que estará rulando por ahí.
¡Un saludo!
PD: tu problema igual era que no utilizabas el especificador de formato correcto.