2016-11-17 5 views
0

J'essaye de faire un programme qui divise simplement le numéro donné par nombre et imprime le reste et la solution du nombre donné divisé par 10. Cependant mon code n'imprime pas les valeurs correctes. Voici le code suivant:Comment utiliser les opérations arithmatiques sur uint64_t?

#include <stdio.h> 
#include <string.h> 
#include <stdint.h> 
#include <stdlib.h> 
uint64_t divide(uint64_t,uint64_t); 

int main(int argc, char *argv[]) 
{ 

     uint64_t num1 = 224262; 
     uint64_t num2 = 244212; 
     divide(num1,num2); 

} 


uint64_t divide(uint64_t set1, uint64_t set2) 
{ 

     printf("%lX\n",set1); 
     uint64_t remainder = set1%10; 
     printf("%lX\n",remainder); 
     set1= set1/10; 
     printf("%lX\n",set1); 
} 

Actuellement, la sortie de ce qui me donne ce qui suit

36C06 
2 
579A 

Comment aurais-je avoir pour qu'elle soit correctement la valeur divisée et le reste?

+3

Quelle est la sortie désirée? '"% lX "' n'est pas le bon spécificateur pour 'uint64_t'. – mch

+0

le bon format printf pour 'uint64_t' est [' PRIu64' ou 'PRIx64'] (http://stackoverflow.com/q/9225567/995714), pas'% lX' –

+0

@mch J'ai essayé d'utiliser printf (" % "PRId64" \ n ", set1), mais cela ne fonctionne pas non plus. Il continue à me donner des erreurs donc je ne sais pas quoi utiliser pour imprimer la solution numérique – h101

Répondre

2

En supposant que votre plate-forme a long taille 64 bits, le format correct pour vos printf s est %lu

uint64_t divide(uint64_t set1, uint64_t set2) 
{ 
    printf("%lu\n",set1); 
    uint64_t remainder = set1%10; 
    printf("%lu\n",remainder); 
    set1= set1/10; 
    printf("%lu\n",set1); 

    return set1; 
} 

utilisant spécificateur de format prédéfini de inttypes.h vous pouvez écrire

#include <stdio.h> 
#include <string.h> 
#include <stdint.h> 
#include <stdlib.h> 
#include <inttypes.h> 

uint64_t divide(uint64_t,uint64_t); 

int main(int argc, char *argv[]) 
{ 
    uint64_t num1 = 224262; 
    uint64_t num2 = 244212; 

    divide(num1,num2); 
} 


uint64_t divide(uint64_t set1, uint64_t set2) 
{ 
    printf("%"PRIu64"\n",set1); 
    uint64_t remainder = set1%10; 
    printf("Reminder = %"PRIu64"\n",remainder); 
    set1= set1/10; 
    printf("Division = %"PRIu64"\n",set1); 

    return set1; 
} 
+2

'% lu' n'est définitivement pas pour 'uint64_t' car long n'est pas nécessairement 64 bits –

+0

@ LưuVĩnhPhúc Eh bien, j'ai ajouté la "solution croisée" – LPs

+1

Votre premier extrait est incorrect et le second est presque, alors pourquoi ne pas supprimer le premier? L'OP veut un hexagone donc vous devriez changer 'PRIx64'. – Lundin