getch

  • 하나의 문자만 입력 받는다. scanf는 문자와 숫자 입력 후에 Enter 키를 입력해야하지만 getch 는 누르는 하나의 문자만 조사하므로 Enter를 누르지 않아도 된다. 
    하지만 입력 즉시 검사 하기 때문에 키보드를 누르게 되면 입력을 취소 할 수 없다.

    즉, 입력 즉시 검사를 하기 때문에 버퍼에 담아둘 필요가 없고 바로 결과 값이 아래 예시의 변수select에 바로 들어간다.

  • <예시>
    printf("게임을 계속 하시겠습니까?(Y/N");
    int select = getch();
    위와 같이 사용하면 입력된 값이 있으면 그 해당 하는 키 값(ASCII 코드)을 리턴한다.
    char select = getch();
    형태로 사용할 경우에는 해당 문자가 리턴된다.

  • getch(); 만 사용할 경우에는 아무키가 눌릴 때 까지 입력 대기 상태가 되므로 
    게임에서 Press Any Key 와 같은 형태로 사용이 가능하다.

  • 종료 인식 시에는 '\r' 로 인식한다.


getche 

  • getch와 크게 다르지는 않다. 하지만 getche의 경우 getch + echo 의 합성된 형태로 입력과 동시에 입력된 값을 출력해 준다. 

  • <예시>
    char ch = getche();
    printf("%c",ch);
    위와 같은 경우에 'A'를 입력할 경우 바로 'AA' 두개가 찍히게 된다.

  • 종료 인식 시에는 '\r' 로 인식한다. 또한 위의 getch와 getche의 경우에는 conino.h 를 꼭 include 시켜야 한다. console and port Input / Output 의 약자이며 윈도우즈에서만 쓸 수 있는 비표준 함수들이 들어 있습니다. 


getchar

  • getchar() 한글자를 입력받은 함수이이지만, 입력버퍼를 사용하므로, Enter가 입력될 때까지 입력을 계속 받아 버퍼에 담아두고, 엔터가 들어오면 입력을 종료하고 버퍼 중에서 가장 첫번째 글자를 리턴한다. 

  • <예시>
    char ch = getchar();
    printf("%c\n",ch);
    입력을 TestA 할 경우 출력을 하면 T 하나만 출력되게 된다.

  • 종료 인식 시에는 '\n'로 인식한다. 윈도우즈에서 쓸 수 있는 표준 입출력 함수에 포함된다.


putchar

  • 표준 문자 출력 함수로 원형은 아래와 같다.
    int putchar ( int character );
    인자는 표준 출력에 쓸 문자. 이 때 문자는 int 형태로 형변환되어 전달.
    오류가 없으면 표준 출력에 씌여진 문자가 반환, 오류가 발생 시 EOF 가 반환되고
    오류 표시자가 설정된다.

  • <예시>
    char ch = 'A';
    putchar(ch);
    위의 소스에서 보듯 출력을 하게 되면 'A'라는 값만 출력된다.


puts

  • 표준 출력에 문자열을 사용한다. 함수의 원형은
    int puts ( const char * str );
    자동으로 '\n'도 추가로 쓴다. 즉, 문자열에 \n이 마지막에 없더라도 추가가 된다.
    인자 str은 표준 출력에 쓰여질 문자열
    성공적으로 쓰이면 음이아닌 값이 리턴된다. 오류가 발생하였다면 EOF를 리턴

  • <예시>
    char str[] = "Welcome to Hell!!";
    puts(str);
    위 소스를 컴파일 후 실행하게 되면 
    Welcome to Hell!! 이 출력된 후 개행("\n")된다.

결론

비교

getchar()

 getche()

getch() 

버퍼 사용

O

X

X

화면 표시

O

O

X

종료 인식

\n

\r

\r


puts 는 문자열 putch 는 문자만 출력하게 된다.

출처 : C언어파트(http://kcoder.tistory.com/ and http://itguru.tistory.com/)


'언어 > C' 카테고리의 다른 글

연산자  (0) 2016.03.14
제어문  (0) 2016.03.13
printf 서식문자  (0) 2016.03.10
변수와 상수  (0) 2016.03.08
주석  (0) 2016.03.08


서식문자

자료형

출력형태

%hd

short, short int

10진 정수 출력(2바이트)

%d or %i

int

10진 정수로 출력(4바이트)

%ld

long int, long

10진 정수로 출력(8바이트)

%o

int

 8진 정수로 출력

%x

int

16진수 정수로 출력
(대문자 X를 쓰면 A~F까지의 숫자도
대문자 출력) 

%u

unsigned int 

부호없는 10진 정수로 출력 

%c

 char

1개의 문자

%s

 char *

문자열

%f

float

고정 소수점 형식의 실수 출력 

%e or %E

 

부동 소수점 형식의 실수 출력 

 %g or %G


 

%p

 void *

 포인터의 주소 출력

%n

 int *

출력된 문자 개수를 포인터 변수에 대입

%ld

long int

long형 10진 정수 출력 

%lf

double(long float)

long형 고정 소수점 형식의 실수 출력 


'언어 > C' 카테고리의 다른 글

연산자  (0) 2016.03.14
제어문  (0) 2016.03.13
getch / getche / getchar / putchar / puts  (0) 2016.03.11
변수와 상수  (0) 2016.03.08
주석  (0) 2016.03.08



변수의 필요성

  • 변수의 필요성은 크게 2가지
    데이터의 보존과 관리
    데이터를 보존하고 필요시에 참조하고 관리하기 위해 변수를 사용

  • 데이터 처리를 위해 주기억장치나 보조기억장치에 저장
    데이터를 저장하기 위해서 메모리 공간을 할당하고 그 공간에 데이터를 보존
    보존된 데이터를 가공(읽고/쓰기)하기 위해 공간을 할당하고 관리하기 위해 이름을 부여

  • 프로그램을 할 때 각각의 데이터들은 고유의 주소를 가지고 있다.
    모든 메모리는 16진수의 숫자로 표시 (0xff00efa3)
    표기된 공간에 데이터를 저장
    예시 : 집주소와 집에 사는 사람을 주소와 데이터에 비유

  • 모든 메모리를 0xff00efa3에 3이라는 값이 살고 있어 0xe0e0d0e0에는 10이라는 값이 살고 있다는 형태로 기억하며 프로그램을 만들기 어렵습니다. 주소를 전부 외우기 어렵기 때문입니다.

  • 그렇기 때문에 0xff00efa3 라는 메모리 주소를 A, 0xe0e0d0e0 이라는 메모리 주소를 B라는 이름을 부여하여 컴퓨터와 프로그래밍 언어가 상호간에 약속을 하고 A에 3, B에 10을 대입하면 컴퓨터가 A,B의 이름이 부여된 공간의 주소로 가서 그곳에 3과 10이라는 값을 넣게 됩니다.

  • 데이터를 보존하고 필요시에 참조하고 관리하기 위해 변수를 사용
    변수를 사용하는 목적은 데이터의 보존과 관리(읽기/쓰기)


변수 (Variable)

  • 변수의 사전적 의미 : 어떠한 관계나 범위 안에서 여러가지의 값으로 변할 수 있는 수
    변수의 프로그래밍적 의미 : 데이터를 저장할 수 있는 메모리 공간
    프로그램이 실행 중에 변하는 값을 처리(읽기/쓰기) 할 수 있는 데이터

  • 변수의 고려사항
    1. 생명주기 : 변수의 생성 소멸시기를 판단
                (생명주기에 따라 전역변수, 지역변수, 정적변수로 구분)

    2. 참조가능 범위 : 변수의 데이터를 언제 참조해야 할지의 결정
                     어디서 참조하고 어디서 참조 안해도 되는지 여부 
                     (생명주기와 밀접한 관계가 있으므로 생명주기에 따라 범위도 결정)

    3.자료형(데이터유형) : 어떠한 형태로 변수를 컴퓨터에 선언할지 여부
                         (정수, 실수, 문자 등 어떤것을 저장하느냐에 따라 판단)

    4.데이터의 크기 : 메모리를 얼마의 크기로 만들지 판단
     (메모리 공간)    단순히 숫자정수라도 데이터 범위에 따라 2byte, 4byte로 선언할 지 판단
                    ( 2바이트는 0~ 655535 음수를 사용할 경우 -32768 ~ 32767 )

    5.저장되는 값의 유형 : 숫자나 문자 같은 값을 저장할지 주소 값 자체를 저장할지 여부 판단

    6.초기화 여부 : 변수를 선언시 기본적으로 공간(주소)만 할당해주기 때문에 내부에는
                  쓰레기값(쓸 수 없는 값)이 남아 있기 때문에 청소를 해줄지 말지의 여부 판단

[그림 1]


[그림 2]
  • [그림 1] 에서 A라는 변수의 이름이 만들어 질 때 [그림 2]에서 빨간선으로 보이는 메모리에 경계영역을 설정 이후에 경계영역은 자료형의 타입에 따라 크기가 결정
    그 후에 경계영역은 사용자가 지정한 이름을 A라고 운영체제에서 지정 (우리는 사용만 하게 된다)

  • 할당된 공간에는 사용할 수 없는 값인 쓰레기 값이 존재
    이유는 메모리가 해제될 때 (변수 소멸 시) 경계영역만 없애기 때문에 이전에 사용한 데이터는 그대로 남아있고 어떠한 값이 얼마에 크기로 들어 있는지 할 수 없기 때문에 쓰레기 값이라 부르는 것

  • 변수 선언 형태

    #include <stdio.h>
    void main(void)
    {
        int    nNum;
    }


상수 (Constant)

  • 상수의 사전적 의미 : 변수의 상대적 의미로 어떠한 상황에도 변화지 않는 수
    상수의 프로그래밍적 의미 : 사용자가 한 번 정해지면 값을 변경할 수 없는 변수 또는 값
    프로그램 실행 중에는 변경할 수 없는 데이터!!!!!!!!!!

  • 리터럴(Literal) 상수
    변수의 이름이 없고 그 값 자체가 상수인 것
    메모리공간 어딘가에 살당은 되어지고 읽기는 가능하지만 변경은 불가
    -  정수형 상수
        1. 10진수 : -1, 2, 3, 0 등으로 표현되는 일반적인 수
        2. 8 진수 : 앞에 숫자 0을 붙여서 표현 8진수 10의 경우 010으로 표현
        3. 16진수 : 앞에 숫자 0과 알파벳 x(Hex의 x) or X 를 붙여 표현
                16진수 A7은 0xA7 혹은 0XA7으로 표현(주로 주소표현에 사용)
        4. 2 진수 : 일반적으로 8bit로 표현 < 0110 0001 과 같이 표현 >
    -  문자형 상수
        - 문자형 상수는 작은 다옴표 ' ' 로 표현.
        - 1개의 문자를 표한하기 위해 사용되며 '1', 'a', 'c', '8' 과 같이 1byte로 표현
          (문자집합에 따라 유니코드에서는 2바이트로 표현)
        - 문자도 상수도 내부저긍로는 숫자 ASCII(아스키 코드표)상에 정해져 있는 값
        문자들의 값이 정해져 있어 문자 '0' 은 내부적으로 48이라는 값, 문자 'A'의 경우 41의 값 
                                        [아스키코드표]

    - 실수형 상수
    IEEE 754표준에 따른 부동 소수점 방식
    실수형 상수는 소수점 가지는 상수 < 1.2, 3.0f, 4.323e, 3.33213e-2 >

    - 문자열 상수
    문자열 상수는 " " 큰따옴표로 표시되며, 문자들의 집합이라는 의미에서 문자열이라 칭한다
    "고길동", "이름", "a" 이런식으로 큰따옴표 사이에 여러개의 문자 사용
    문자형 상수 'a'와 문자열 상수 "a" 다르며 'a'은 문자 a, "a" 는 문자열 a라 부릅니다

  • 심볼릭(Symbolic) 상수
    지정된 특정 변수의 데이터를 변경하지 못하도록 상수화(Constant)하여 사용하거나 상수로 정의된 값을 이름으로 지정해서 상수를 상징적으로 사용하는 상수들

    1. 리터럴 상수와의 차이점
        - 리터럴 상수는 변수의 이름이 없고 값 자체가 상수화
        - 심볼릭 상수는 변수를 상수화시켜서 사용하던가 특정 이름을 지정


    2. 심볼릭 상수의 종류
        - const (변수의 상수화)
            선언하는 변수의 앞에 const 키워드를 붙여 상수화
            변수의 값을 바꿀 수 없기 때문에 반드시 선언과 동시에 초기화를 진행해서 시킵니다.
          변수는 선언되어지면서 쓰레기 값이 들어가 있기 때문에 쓰레기 상수는 문법상 에러처리

        - define (정의 상수화)
            전처리 명령 중 하나인 #define 명령으로 특정 이름을 지정해서 상수값으로 처리
            <예시 : #define MAX 10 / MAX란 이름을 모두 10으로 상수 처리>


결론

변수는 데이터를 보존하거나 관리의 주목적
상수는 정해진 값을 사용하기만 하고 변경은 하지 않는게 주목적
변경되지 않아야할 모든 데이터는 상수화 시켜서 사용하는 것이 바람직
수시로 변경되는 데이터는 변수로 선언하는 것이 바람직

출처 : http://blog.naver.com/jerokill/20198649799


'언어 > C' 카테고리의 다른 글

연산자  (0) 2016.03.14
제어문  (0) 2016.03.13
getch / getche / getchar / putchar / puts  (0) 2016.03.11
printf 서식문자  (0) 2016.03.10
주석  (0) 2016.03.08

+ Recent posts