|
문자열을 입력받아 10진수 숫자만 2진수로 변환하는 소스를 만들어야 합니다..
예를들어 i am 12 years old를 입력하면 12는 2진수로 바뀌어서 i am 00001100 years old로 출력하게 하느 소스를 만들어야 합니다..
#include <stdio.h>
int get_digit(int decimal);
void convert_num(char *num, int decimal); <<--괄호안의것
void main()
{
char num[255]={0}, question[255]={0};
int decimal=0, digit=0, i=0;
printf("십진수 숫자만 이진수로 바꿔서 출력하는 프로그램입니다.\n");
printf("아무 문장과 십진수 숫자를 입력해 주세요.\n");
gets(question);
while(1)
{
if(question[i]=='\0')
break;
if((question[i]>='0')&&(question[i]<='9'))
{
sscanf(&question[i], "%d", &decimal); <<--무슨말이에요?sscanf를 안쓰고 하는 방법 없 읋까요?
digit=get_digit(decimal);
convert_num(num, decimal);
printf("%s", num);
i=i+digit; <<-이 if문안의 모든흐름이 이해가 잘 안되네여..
}
else
printf("%c", question[i++]);
}
printf("\n");
}
int get_digit(int decimal)
{
int i=0;
if (decimal==0)
return 0;
while (decimal>0)
{
decimal=decimal/10; <<----이건 왜 썼을까여?ㅠㅠ
i++;
}
return i;
}
void convert_num(char *num, int decimal)
{
int i = 0, remainder=0;
char temp[255]={0};
if (decimal==0)
{
num[0]='0'; <--배열에 0이 들어간거랑 null이 들어간거랑 무슨뜻이져?
num[1]=0;
return;
}
while(decimal>0)
{
remainder=decimal%2;
temp[i]=remainder+'0'; <<==문자열도 아닌데 null을 왜 넣었을까ㅣ여?ㅡㅡ
decimal=decimal/2;
i++;
}
temp[i]=0;
for(int j=0;j<i;j++)
num[j]=temp[(i-j)-1];
num[j]=0;
}
완벽하게 동작하는 소스입니다..
제가 옆에 체크한부분 좀 설명해주세요
이틀밤새서 고민해서 그런가 아..머리가 안돌아갑니다..
자세하게 아니라도 제발 대답 좀 부탁드려요..
|