#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int num;
int meth;
// char answer;
}Info;
void SetInfo(Info *Ent);
void transducer(int num, int meth);
void check_meth(Info *Ent);
void binary(int num);
void oct(int num);
void hex(int num);
char hex_helper(int num);
void main()
{
Info Ent;
SetInfo(&Ent);
transducer(Ent.num, Ent.meth);
}
void SetInfo(Info *Ent)
{
printf("=== decimal transducer ===\n\n");
printf("Input decimal : ");
scanf("%d", &Ent->num);
printf("Method (1. Binary 2. Octal 3. hex) : ");
scanf("%d", &Ent->meth);
check_meth(Ent);
printf("\n\n");
}
void check_meth(Info *Ent)
{
if(!(Ent->meth > 0 && Ent->meth < 4))
{
system("clear");
SetInfo(Ent);
}
}
void transducer(int num, int meth)
{
switch(meth)
{
case 1:
{
binary(num);
break;
}
case 2:
{
oct(num);
break;
}
case 3:
{
hex(num);
break;
}
}
}
void binary(int num)
{
int count = 0, rest = num;
int Save[20] = {0};
for(count = 0; rest > 0;count++)
{
if(rest == 1)
{
Save[count] = rest;
break;
}
Save[count] = rest%2;
rest = rest/2;
}
printf("Binary Result %d -> ", num);
for(count; count > -1; --count)
printf("%d", Save[count]);
printf("\n");
}
void oct(int num)
{
int count = 0, rest = num;
int Save[20] = {0};
for(count = 0; rest > 0; count++)
{
if(rest < 8)
{
Save[count] = rest;
break;
}
Save[count] = rest%8;
rest = rest/8;
}
printf("Oct Result %d -> ", num);
for(count; count > -1; --count)
printf("%d", Save[count]);
printf("\n");
}
void hex(int num)
{
int count = 0, rest = num;
char Save[20];
for(count = 0; rest > 0; count++)
{
if(rest < 16)
{
Save[count] = hex_helper(rest);
break;
}
Save[count] = hex_helper(rest);
rest = rest/16;
}
printf("Hex Result %d -> ", num);
for(count; count > -1; --count)
printf("%c", Save[count]);
printf("\n");
}
char hex_helper(int num)
{
switch(num)
{
case 0:
return '0';
case 1:
return '1';
case 2:
return '2';
case 3:
return '3';
case 4:
return '4';
case 5:
return '5';
case 6:
return '6';
case 7:
return '7';
case 8:
return '8';
case 9:
return '9';
case 10:
return 'A';
case 11:
return 'B';
case 12:
return 'C';
case 13:
return 'D';
case 14:
return 'E';
case 15:
return 'F';
}
}
const char hex2asc[] = {'0', '1', '2', '3', .... 'A', 'B', ... 'F'}; ---------------> hex2asc[num]
for(count = 0; rest > 0; count++) 아래도 한심하네. 함수에서 스트링을 리턴하는게 좋을것 같긴하다만, 너한텐 좀 어려울것 같고, for 문 안에 if 날려버리고 Save[count] = hex2asc[rest & 0xF]; rest >>= 4; 로 바꾸렴
case 는 왜 중괄호로 묶었냐. 쓸데없이.
함수명 대소문자도 통일하고... 스트링관련 함수들을 직접 짜보렴.. strlen, strcmp, strcpy, strstr 같은거. 그걸 군살 없이 짤 수준이 되면 한 단계 나아진거다.