#include <stdio.h>
#include <stdlib.h>
int HextoDec(int a[],int size);
int main(){
int c;
int num[1000];
int numofP;
int temp;
int len=0;
int answer[1000];
int idx=0;
int i;
numofP=getchar();
numofP -='0';
temp=getchar();
while((c=getchar())!= EOF){
while((c!='\n')&&(c!=EOF)){
num[len]=c;
len++;
c=getchar();
}
answer[idx]=HextoDec(num,len);
len=0;
idx++;
if(c==EOF) break;
// if(idx==numofP) break;
}
for(i=0;i<numofP;i++){
if(answer[i]==-1) printf("null");
else printf("%d",answer[i]);
// if(i!=(numofP-1))
printf("\n");
}
system("pause");
return 0;
}
int HextoDec(int a[],int size){
int digit=1;
int result=0;
int i;
int check=0;
if((a[0]=='0')&&((a[1]=='x')||(a[1]=='X'))) {
for (i = 0; i < size-2; i++) {
if ((a[size-i-1] < '0') || ((a[size-i-1] > '9') && (a[size-i-1] < 'A')) || ((a[size-i-1] > 'F') && (a[size-i-1] < 'a')) || (a[size-i-1] > 'f')) {
check = 1;
break;
}
if((a[size-i-1]>='0')&&(a[size-i-1]<='9')) a[size-i-1] -= '0';
else if((a[size-i-1]>='A')&&(a[size-i-1]<='F')) a[size-i-1] = a[size-i-1]-'A'+10;
else if((a[size-i-1]>='a')&&(a[size-i-1]<='f')) a[size-i-1] = a[size-i-1]-'a'+10;
result += (a[size - i-1] * digit);
digit *= 16;
}
} else check = 1;
if(check){
return -1;
}
else return result;
}
의외의 장소에서 오류가 있었네요.
numofP=getchar();
numofP -='0';
이 부분이 잘못되었습니다.
getchar()는 1개의 문자만을 받기 위한 함수입니다. 저 코드로는 0~9까지의 값이 들어오면 제대로 작동하겠지만 10 이상의 값이 들어오게 될 경우에는 문제가 발생하겠지요.
10을 예로 들면
numofP는 1을 받게 될 것입니다. 그리고 temp에 0이 들어가게 되겠지요.
이 문제를 해결하려면, 책에 있는 방법으로는 getline을 받아서 문제의 갯수를 문자열로 받고 atoi함수를 가지고 그 문자열을 정수로 바꿔주면 될 것입니다.
아니면 scanf라는 함수를 이용하면 좀 더 쉽게 숫자를 입력받을 수 있습니다. scanf는 책의 부록이나 인터넷을 검색해보시기 바랍니다.