Question

Je suis ici essayant de convertir une hexa à 4 chiffres en Dec, mais n'a pas réussi. Voici un mon code.

unsigned int array[4];                         

printf("Type in 4-digit hexa: \n");

scanf("%x", &array);

while(getchar() != '\n');

printf("Your number in dec is %u \n", array);

Je ne sais pas ce qui ne va pas avec ça, mais cela ne donnerait que la sortie correcte de déc. Comme lorsque je mets à Eeff, il est censé donner 61183 mais le programme continuait à imprimer 65518.

Où est ce numéro? Qu'est ce qui ne va pas avec mon code? J'ai utilisé non signé INT selon ma considération que FFFF est égal à 65385 et la gamme d'Int non signé est de 0 à 65535. Il ne devrait y avoir aucun problème avec la gamme de données et j'ai également utilisé% u avec elle.

La seule chose à laquelle je peux penser en ce moment après que j'ai fait de la recherche, c'est que ce problème puisse avoir qc devait faire avec la taille de l'INT non signé vers INT ou STH. J'ai lu l'explication mais je n'ai pas bien compris.

Je sais que cela pourrait être une duplication, mais je demande une explication plus facile pourquoi cela ne fonctionne pas. Pour être honnête, je suis absolument nouveau pour ce site et la programmation, alors allez-vous facilement sur moi avec le codage. Fyi, je ne sais pas vraiment rien à l'extérieur de stdio.h.

Était-ce utile?

La solution

You are passing a pointer, array, to printf(). There is no need for an array here, what you're trying to scan and print is a single number.

unsigned int number;

printf("Type in 4-digit hex:\n");

if (scanf("%x", &number) == 1)
  printf("Your number in dec is %u \n", number);

Also note that it's considered a good idea to check if scanf() succeeds or not, by inspecting the return value.

Autres conseils

You don't need an array for that:

unsigned int val;
printf("Type in 4-digit hexa: \n");
scanf("%x", &val);
printf("Your number in dec is %u \n", val);

a. print array[0], not array.

(optional) b. scan to array, not to &array.

c. what is the point of the getchar()?

No, you must input as string to a point of characters. After that, you convert to number. Ex

char *str=char[10];
int i=0,num=0;
printf("Type in 4-digit hexa: ");
scanf("%s",str);

for(i=0;str[i]!='\0';i++)
   if(str[i]>='0' && str[i]<='9') num=16*num+str[i]-'0';
   else if(str[i]>='a' && str[i]<='f') num=16*num+str[i]-'a';
   else if(str[i]>='A' && str[i]<='F') num=16*num+str[i]-'A';

printf("Dec is %d",num);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top