본문 바로가기
코스웨어/13년 스마트컨트롤러

20130322 연습문제 <문남경>

by 알 수 없는 사용자 2013. 3. 25.
728x90
반응형

2번 문제 풀다가...한꺼번에 짜게 됐네요..;


#include <stdio.h>

int main()

{

int iNum;

int *ip;

unsigned char *iN_p;

float fNum;

float *fp;

unsigned char *fN_p;

char ch;

char *cp;

  int va_N;


iNum = 25;

fNum = 38.9;

ch = 'g';

ip = &iNum;

fp = &fNum;

cp = &ch;

iN_p = (unsigned char *)&iNum;

fN_p = (unsigned char *)&fNum;


printf("\n\n다음 변수의 번호를 입력하면,\n");

printf("선택한 변수의 각 바이트의 내용을 아스키코드로 출력합니다.\n\n\n");

printf("1.iNum\n2.fNum\n3.ch\n\n변수의 번호를 입력하세요 : ");

scanf("%d",&va_N);

putchar('\n');


switch(va_N)

{

case 1:

{

*(ip+1)=0;                                            // 다음 주소 값을 초기화하지 않으면 2번째바이트 부터는 주소가 이동하기 때문에

 값이 틀려진다. 원래는 25 00 00 00인데 25 00 5A 18 이런식으로 쓰레기 값으로 채워진다.

printf("변수 iNum의 각 바이트 내용 :\n");

printf("1번째 바이트(주소0x%08X)내용 : %d\n", iN_p, *iN_p);

printf("2번째 바이트(주소0x%08X)내용 : %d\n", ++iN_p, *(++iN_p));

printf("3번째 바이트(주소0x%08X)내용 : %d\n",(iN_p+2), *(iN_p+2));

printf("4번째 바이트(주소0x%08X)내용 : %d\n",(iN_p+3), *(iN_p+3));

printf("선택하신 변수는 int형이므로 4byte의 공간을 차지하기 때문에\n");

printf("5번째 바이트 존재하지 않습니다.\n");

printf("int형 변수 iNum의 값을 다시 지정해 주세요 :  ");

scanf("%d",&(*ip));

printf("입력한 변수의 곱은 %d 입니다.\n", 2*(*ip));

break;

}

case 2:

{

*(fp+1)=0;

printf("변수 fNum의 각 바이트 내용 :\n");

printf("1번째 바이트(주소0x%08X)내용 : %08X\n", fN_p, *fN_p);

printf("아스키코드 문자로 : %2c\n",*fN_p);

printf("2번째 바이트(주소0x%08X)내용 : %08X\n", ++fN_p, *(++fN_p));

printf("아스키코드 문자로 : %2c\n",*(++fN_p));

printf("3번째 바이트(주소0x%08X)내용 : %08X\n",(fN_p+2), *(fN_p+2));

printf("아스키코드 문자로 : %2c\n",*(fN_p+2));

printf("4번째 바이트(주소0x%08X)내용 : %08X\n",(fN_p+3), *(fN_p+3));

printf("아스키코드 문자로 : %2c\n",*(fN_p+3));

printf("선택하신 변수는 float형이므로 4byte의 공간을 차지하기 때문에\n");

printf("5번째 바이트 존재하지 않습니다.\n");

break;

}

case 3:

{

*(cp+1)=0;

printf("변수 cp의 각 바이트 내용 :\n");

printf("1번째 바이트(주소0x%08X)내용 : %c\n", cp, *cp);

printf("선택하신 변수는 char형이므로 1byte의 공간을 차지하기 때문에\n");

printf("2번째 바이트 존재하지 않습니다.\n");

break;

}

default:

{

printf("번호를 잘못입력하셨습니다. 1,2,3번 중에 하나의 번호를 입력하세요\n");

break;

}

}

return 0;

}


728x90