Domanda

Sono qui cercando di convertire 2 cifre Hexa in DEC, ma non ha avuto successo. Ecco il mio codice.

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);
.

Non so cosa c'è che non va in questo, ma non darebbe solo la corretta produzione di DEC. Come quando ho messo in Eeff, dovrebbe dare 61183 ma il programma continuava a stampare 65518.

da dove è questo numero? Cosa c'è di sbagliato nel mio codice? Ho usato INT in modo non firmato secondo la mia considerazione che FFFF è uguale a 65385 e la gamma per int unsigned è da 0 a 65535. Non ci dovrebbe essere un problema con la gamma di dati e ho anche usato% u con esso.

L'unica cosa che posso pensare adesso dopo aver fatto parte della ricerca è che questo problema potrebbe avere sth a fare con le dimensioni di int unsigned per int o sth. Leggo la spiegazione ma non ho capito.

lo so, questa potrebbe essere una duplicazione ma sono qui chiedendo una spiegazione più facile del perché questo non funziona. Per essere onesti, sono assolutamente neokby sia per questo sito che per la programmazione quindi per favore vai facilmente con me con la codifica. FYI, non so davvero nulla al di fuori di Stdio.h.

È stato utile?

Soluzione

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.

Altri suggerimenti

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top