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