Premessa: Non sono pratico di programmazione in C. Il problema posto è molto comune MA in questo caso non si possono usare funzioni particolari come itoa o atoi, niente puntatori. Solo int, char, while, for.
Ho scritto questo codice:
codice:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
int valore; //conterrà il valore decimale finale
/*
* La conversione esadecimale --> decimale avviene
* moltiplicando ogni valore del numero esadecimale
* per 16^posizione.
* Esempio, per convertire in decimale il numero FFB
* facciamo: (F*16^2) + (F*16^1) + (B*16^0) che
* corrisponde a (15*16^2) + (15*16^1) + (11*16^0).
*/
char buffer[256]; //contiene il valore esadecimale inserito dall'utente
printf("Inserisci il numero esadecimale da convertire in decimale: ");
scanf("%s", buffer); //acquisisco il numero
int len = strlen(buffer); //calcolo la lunghezza del numero inserito
int i = 0; //indice usato per lo scorrimento nel while
while(buffer[i] != '\0') {
if(strcmp(buffer[i],"1")==0) {
valore += 1*(pow(16,len-1));
}
if(strcmp(buffer[i],"2")==0) {
valore += 2*(pow(16,len-1));
}
if(strcmp(buffer[i],"3")==0) {
valore += 3*(pow(16,len-1));
}
if(strcmp(buffer[i],"4")==0) {
valore += 4*(pow(16,len-1));
}
if(strcmp(buffer[i],"5")==0) {
valore += 5*(pow(16,len-1));
}
if(strcmp(buffer[i],"6")==0) {
valore += 6*(pow(16,len-1));
}
if(strcmp(buffer[i],"7")==0) {
valore += 7*(pow(16,len-1));
}
if(strcmp(buffer[i],"8")==0) {
valore += 8*(pow(16,len-1));
}
if(strcmp(buffer[i],"9")==0) {
valore += 9*(pow(16,len-1));
}
if(strcmp(buffer[i],"A")==0) {
valore += 10*(pow(16,len-1));
}
if(strcmp(buffer[i],"B")==0) {
valore += 11*(pow(16,len-1));
}
if(strcmp(buffer[i],"C")==0) {
valore += 12*(pow(16,len-1));
}
if(strcmp(buffer[i],"D")==0) {
valore += 13*(pow(16,len-1));
}
if(strcmp(buffer[i],"E")==0) {
valore += 14*(pow(16,len-1));
}
if(strcmp(buffer[i],"F")==0) {
valore += 15*(pow(16,len-1));
}
i = i + 1;
len = len - 1;
}
printf("\nIl numero decimale corrispondente è: %d", valore);
system("PAUSE");
}
Ma il programma crasha appena si inserisce un numero esadecimale e si preme invio.
Suggerimenti? Grazie