'Programming/C/C++'에 해당되는 글 14건

  1. 2008/03/26   C언어 변환문자 (6)
  2. 2008/03/23   C언어로 게임만들기 [미로편] # 2 (5)
  3. 2008/03/22   C언어로 게임만들기 [미로편] (6)

C언어 변환문자

from Programming/C/C++ 2008/03/26 18:20
바로 예제부터 ㄱㄱ

우리는 C언어를 처음 배울 때 이 소스부터 배우게됩니다.
#include <stdio.h>

void main()
{
    printf("Hello world");
}

위 소스는 누구나 쉽게 이해알 수 있죠. 문제는 아래소스
#include <stdio.h>

void main()
{
    int a=5;
    printf("%d",a);
}

중간에 나오는 %d라는 놈 덕에 꽤 당황하죠.

%d는 변환문자라고 합니다. 순서에 대응하는 변수를 만지작(?) 합니다.

1.변환문자의 종류에는

%d,%i

부호 있는 10진 정수형 출력.

%u

부호 없는 10진 정수형 출력.

%o

부호 없는 8진 정수형 출력.

%x, %X

부호 없는 16진 정수형 출력, x는 소문자, X는 대문자로 출력된다.

%c

한 개의 문자 출력. 문자의 아스키 코드가 인수로 사용된다.

%f  

소숫점 표기. float형이나 double형을 출력한다.
정밀도가 나오지 않으면 소숫점 6자리까지 출력된다.

%s  

마지막 NULL을 제외한 문자열을 출력

%%

문자 '%'출력

제가 써본거라곤 d,c,f,s밖에 없네요.ㅋㅋ

2.printf에서
printf에서 변환문자로 재밌게 놀 수 있습니다.
#include <stdio.h>

void main()
{
    int a=5;
    printf("%4d",a);
}

달라진 건 printf의 %d사이에 숫자 4가 있다는 거. ("필드 폭 지정자"라고 합니다.)
이건 폭을 지정합니다. (기본은 오른쪽정렬)
가운데의 숫자 바꿔가면서 하면 금방 아실거에요.
왼쪽으로 정렬하고 싶다면.
#include <stdio.h>

void main()
{
    int a=5;
    printf("%-4d",a);
}

달라진 건 %4d가 %-4d로 바뀐 거 밖에 없어요. (이 "-"는 "플래그"라고 합니다.)
플래그의 종류에는
-

출력되는 내용을  왼쪽으로 정렬
적지 않으면 기본으로 오른쪽 정렬

+

수를 출력할 때 항상 +나 -를 앞에 출력

  (공백)

수를 출력할 때 앞을 빈칸으로

# %o, %x, %X에서만 쓰임, 8진수는 0, 16진수는 0x를 앞에 출력
참 쉽죠?

2. scanf에서
scanf에서도 재밌게 놀 수 있어요.
작년에 이걸 알았다면 대회에서 GG는 없었을 텐데요. ㅜㅜ

2개 이상의 수 입력받기.
#include <stdio.h>

main()
{
    int a,b;
    printf("숫자 2개 : ");
    scanf("%d%d",&a,&b);

    printf("\n%d하고 %d\n",a,b);
}

대부분 이헐게 합니다. 공백을 기준으로 숫자를 입력받죠.
,(쉼표)로 숫자를 구분하고 싶을 때는 간단하게
scanf("%d%d",&a,&b);scanf("%d,%d",&a,&b);로 바꿔주면 끝.

%d와 %d사이에 ,를 넣었습니다.
scanf는 여기서 끝내겠습니다.

이건 헛소리....



이 글이 유익하다면 (굽신굽신) ->

Trackback Address >> http://zfanta.com/trackback/369 관련글 쓰기

  1. BlogIcon Mr.번뜩맨 2008/03/29 00:56  address  modify / delete  reply

    헐...C언어..뭐가뭔지 한게도 모르겠네요..+_+;;

  2. BlogIcon Lonewolf dlbo 2008/03/30 19:56  address  modify / delete  reply

    ㅋㅋ 저 gets를 이용하는 방법이 원시적인 수준의 scanf라죠. 실제로 받은 데이터들을 전부 문자열로 취급한 후 숫자인지 뭔지 분류해 내는 방법을 쓴답니다.

    •  address  modify / delete 2008/03/30 22:43 BlogIcon  환타

      저는 역시 야만인건가요 ㅋㅋㅋ

      오스트랄로 피테쿠스
      호모 에렉투스
      호모 사피엔스
      호모 사피엔스 사피엔스
      이 절 중에 고르라면 그냥 호모?
      그냥 헛소리입니다 ㅋㅋ

  3. BlogIcon 마티오 2008/04/01 12:04  address  modify / delete  reply

    대학 선배님이 현재 C 언어로 쩔쩔 매고 계시는데 ㅠㅠ;;
    저는 그냥 웹언어에 머물러 있을레요 엉엉;;

오늘은 2번째.
내일 3번째 글 올리면 끝날 것 같다.
아 진짜 블로그에 쓸 글이 없어

새로 추가된 move함수입니다. 방향키를 입력받아서 돌을 움직입니다.

void move()
{
    int input;
    input=getch();

    switch(input)
    {
    case RIGHT :
        if(x<40)
        {             
            if(map1[y][(x/2)+1] == 0)
            {
                gotoxy(x,y);
                printf(" ");
                x+=2;
                gotoxy(x,y);
                printf("●");
            }
        }
        break;

    case LEFT :
        if(x>1)
        {             
            if(map1[y][(x/2)-1] == 0)
            {
                gotoxy(x,y);
                printf(" ");
                x-=2;
                gotoxy(x,y);
                printf("●");
            }
        }
        break;
    case UP :
        if(y>1)
        {             
            if(map1[y-1][x/2] == 0)
            {
                gotoxy(x,y);
                printf(" ");
                y-=1;
                gotoxy(x,y);
                printf("●");
            }
        }
        break;

    case DOWN :
        if(y<20)
        {             
            if(map1[y+1][x/2] == 0)
            {
                gotoxy(x,y);
                printf(" ");
                y+=1;
                gotoxy(x,y);
                printf("●");
            }
        }
        break;
    }
}

가는 곳에 벽이 없다면 지금 위치에 있는 걸 지우고 새로운 돌을 그립니다.

move함수 호출은 이렇게 무한루프 ㅇ_ㅇ
while(1)
{
    move();
}


최종 소스
#include <stdio.h>
#include <windows.h>
#include <conio.h>

#define UP 72  
#define DOWN 80  
#define LEFT 75  
#define RIGHT 77  

int x,y;

int map1[20][20]=
{
    { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 },
    { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    { 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
    { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 },
    { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    { 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
    { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 },
    { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    { 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
    { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 },
    { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    { 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
    { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
};
void gotoxy(int x, int y)
{
    COORD XY = {x, y};
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), XY);
}
void move()
{
    int input;
    input=getch();

    switch(input)
    {
    case RIGHT :
        if(x<40)
        {             
            if(map1[y][(x/2)+1] == 0)
            {
                gotoxy(x,y);
                printf(" ");
                x+=2;
                gotoxy(x,y);
                printf("●");
            }
        }
        break;

    case LEFT :
        if(x>1)
        {             
            if(map1[y][(x/2)-1] == 0)
            {
                gotoxy(x,y);
                printf(" ");
                x-=2;
                gotoxy(x,y);
                printf("●");
            }
        }
        break;
    case UP :
        if(y>1)
        {             
            if(map1[y-1][x/2] == 0)
            {
                gotoxy(x,y);
                printf(" ");
                y-=1;
                gotoxy(x,y);
                printf("●");
            }
        }
        break;

    case DOWN :
        if(y<20)
        {             
            if(map1[y+1][x/2] == 0)
            {
                gotoxy(x,y);
                printf(" ");
                y+=1;
                gotoxy(x,y);
                printf("●");
            }
        }
        break;
    }
}


void main()
{
    int count,count2;
    for(count=0;count<20;count++)
    {
        for(count2=0;count2<20;count2++)
        {
            if(map1[count][count2]==1)
                printf("○");
            else
                printf("  ");
        }
        printf("\n");
    }

    x=0;
    y=1;

    gotoxy(x,y);
    printf("●");
    while(1)
    {
        move();
    }
}


추가된 게 move함수밖에 없네요. (목숨만은 살려주세요)
이해안가는 부분은 리플 ㄱㄱ


Ps. 그거보다 내일 월요일 ㅜㅜㅜㅜ

학교가자

이 글이 유익하다면 (굽신굽신) ->

Trackback Address >> http://zfanta.com/trackback/368 관련글 쓰기

  1. BlogIcon Mr.번뜩맨 2008/03/25 10:13  address  modify / delete  reply

    오..C언어라..좀 골아픈 단어이긴 하지만 신기하다는..

    •  address  modify / delete 2008/03/26 17:58 BlogIcon  환타

      저는 신기해하다가 정신줄 놓은 적도 여러번 있지요 ㅎㅎ
      프로그래밍 너무 힘들어요 ㅜㅜ

  2. c언어초보 2008/05/20 03:17  address  modify / delete  reply

    안녕하세요??
    위,아래,오른쪽,왼쪽 눌렀을때 이프문에요... x/2를 왜 해야하는지 이해가 안되요ㅜㅠ...설명좀...
    부탁드릴게요...

    •  address  modify / delete 2008/05/20 18:45 BlogIcon  환타

      가로로 이동할 때 ●,○가 a,b,c등 문자보다 옆으로 2배 더 길어서 gotoxy함수로 커서를이동해 출력해줄 때 두 칸씩 움직여줘야해서 x-=2,x+=2처럼 사용했구요 배열에 저장할 때는 낭비되는 공간없이 저장하려고 x를 2로 나누어주었습니다.

      aa
      두배 더 길죠 ㅎㅎ, 저소스에서 x-=2,x+=2를 x-=1,x+=1로 바꿔보면 아실거에요.

  3. c언어초보 2008/05/24 15:24  address  modify / delete  reply

    ㅎㅎ 감사합니다^^

저번에 지저분한 소스로 간신히 오목 만들고 나서 이번엔 미로찾기입니다..
이번 게임이 더쉬운데 귀찮아요. ㅡㅡ 개학하니까 죽을 것 같아요.
살려주세요.

예전 글은 C언어로 오목만들기 5 마지막.

예전처럼 #define로 방향키 설정해주고
#define UP 72   
#define DOWN 80  
#define LEFT 75  
#define RIGHT 77


커서를 이동해주는 함수 gotoxy도 정의해주고
void gotoxy(int x, int y) 
{
    COORD XY = {x, y};
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), XY);
}

이 함수를 쓰시려면 #include <windows.h> 를 꼭.

그리고 미로도 만들어줍니다. 1은 벽,0은 빈 공간입니다.
int map1[20][20]=
{
    { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 },
    { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    { 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
    { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 },
    { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    { 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
    { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 },
    { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    { 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
    { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 },
    { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    { 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
    { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
};

가로 20, 세로 20의 미로입니다.
참.................................

이건 화면에 미로를 그려주는 main함수
main()
{
    int count,count2;
    for(count=0;count<20;count++)
    {
        for(count2=0;count2<20;count2++)
        {
            if(map1[count][count2]==1)
                printf("○");
            else
                printf("  ");
        }
        printf("\n");
    }
    system("PAUSE");
}


이만 미로 그리는 부분에서 끝내렵니다.



개학이 사람잡네요.





이 글이 유익하다면 (굽신굽신) ->

Trackback Address >> http://zfanta.com/trackback/367 관련글 쓰기

  1. BlogIcon 이찬식 2008/03/22 13:12  address  modify / delete  reply

    제목에 낚였네요.

  2. BlogIcon Lonewolf dlbo 2008/03/22 22:36  address  modify / delete  reply

    저도 제목에 낚였음.... C언어로 게임만들기[오목편]이라고 되있어요 ㅋㅋ 맵은 랜덤으로 만들어보는건 어떠련지요? 잘 찾아보시면 미로맵 만드는 알고리즘도 있을겁니다 ㅋㅋ

    •  address  modify / delete 2008/03/23 15:50 BlogIcon  환타

      어.
      제가 오목이라고 썻네요.
      아~~~~~~~ 미로라고 써야하는데 ㅎㅎㅎ
      이제 찾아버려서 ㅇㅅㅇ

  3. BlogIcon Mr.번뜩맨 2008/03/25 10:13  address  modify / delete  reply

    헐..개학..ㅡㅡㅋ그나저나 요리조리 만들어논 미로가 신기하기만 하네요..^^*

    •  address  modify / delete 2008/03/26 18:00 BlogIcon  환타

      이젠 개학에다가 시험기간입니다.
      거기다가 이젠 중학생도 학교에 남겨서 자율학습시킨답니다.
      아.
      힘들어요 ㅋㅋ