c言語を習い始めて1ヶ月ほどの者です。
タイトルにある通りです。
最後のfor文が間違っているみたいなのですがいまいちピンときません。
コードが汚い上にもっと楽な方法があるのは知っています。
しかし、それを使わずにやれとのことなので困っています。
上のfor文を変えずに下のfor文の良いアルゴリズムを教えてほしいです。

#include <stdio.h>

int main(){
  char c;
  int i, a[1000];
  printf("Input hexademical number:");
  for(i=0;;i++){
    scanf("%c", &c);
    if(c == '\n'){
      i -= 1;
      break;
    }else if(c == '0'){
      a[i]=0;
    }else if(c == '1'){
      a[i]=1;
    }else if(c == '2'){
      a[i]=2;
    }else if(c == '3'){
      a[i]=3;
    }else if(c == '4'){
      a[i]=4;
    }else if(c == '5'){
      a[i]=5;
    }else if(c == '6'){
      a[i]=6;
    }else if(c == '7'){
      a[i]=7;
    }else if(c == '8'){
      a[i]=8;
    }else if(c == '9'){
      a[i]=9;
    }else if(c == 'a'){
      a[i]=10;
    }else if(c == 'b'){
      a[i]=11;
    }else if(c == 'c'){
      a[i]=12;
    }else if(c == 'd'){
      a[i]=13;
    }else if(c == 'e'){
      a[i]=14;
    }else if(c == 'f'){
      a[i]=15;
    }
  }
  int k=0, x, y, z=1;
  for(x=0; x<i+1; x++){
    for(y=0;y<i-x;y++){
      z*=16;
    }
    k+=a[x]*z;
    printf("%d\n%d\n", k, z);
    }
  printf("Decimal number is %d\n", k);
  return 0;
}