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:
Ma il programma crasha appena si inserisce un numero esadecimale e si preme invio.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"); }
Suggerimenti? Grazie![]()

Rispondi quotando