[C] 문자

2022. 11. 25. 21:17C언어/기본 개념

728x90

아스키 코드

아스키 코드는 128개 문자를 0 ~ 127의 숫자로 어떤 값을 표현 하는 것이다.

종류 문자 상수 아스키 코드 출력 시
숫자문자(10개) '0' ~ '9' 48 ~ 57 문자
대문자(26개) 'A' ~ 'Z' 65 ~ 90 문자
소문자(26개) 'a' ~ 'z' 97 ~ 122 문자
특수 문자(33개) ' '(공백), '$', '&' ... 32, 36, 38 ... 문자
제어 문자(33개) '\0', '\t', '\n', '\r' ... 0, 9, 10, 13 ... 제어 기능
char small, cap = 'G';

if ((cap >= 'A') && (cap <= 'Z'))          //대문자 범위인지 파악 (&&은 둘다 참일 경우에만 참)
{
    small = cap + ('a' - 'A');                 //아래 글 참고
}
printf("대문자 : %c \n", cap);
printf("소문자 : %c", small);
대문자 : G
소문자 : g

`소문자 아스키 코드가 대문자 아스키 코드보다 크다.

'a' - 'A'를 하고 그 값을 cap 값에 더해주면 'g' 값이 나온다.


 scanf 함수

char ch1, ch2;
scanf("%c%c", &ch1, &ch2);

printf("[%d, %d]", ch1, ch2);

return 0;
ab
[97, 98]
a b
[97, 32]

예를 들어 ab를 키보드로 입력 했을 때는 [97, 98]이 나온다. 하지만 a b로 입력 했을 때는 [97, 32]로 나온다.

왜냐하면 %c는 공백도 문자로 인식하기 때문에 공백을 나타내는 아스키 코드인 32를 출력한다. space bar, tab, enter 같은 문자를 화이트 스페이스라고 한다.

만약 인식하지 않기를 바란다면 scanf에서 %c(공백)%c을 넣어주면 입력 된 공백은 인식하지 않는다.


getchar함수, putchar함수

scanf는 문자 뿐만 아니라 숫자도 입력하는 기능이 포함되어 있어 크기가 크다.

문자 전용 입출력 함수이다.

int getchar(void);       < 매개변수가 없고 입력한 문자를 반환.
int putchar(int);          < 출력할 문자를 인수로 준다.
char ch;

ch = getchar();  //입력 받기
printf("입력한 문자 : ");

putchar(ch);   //출력
putchar('\n');   //출력

return 0;
A
입력한 문자 : A

버퍼

scanf 함수 과정을 보면 키보드 > 버퍼 > 변수 이다.

이 말은 데이터가 일단 버퍼에 저장 된 후에 scanf함수에 의해 변수에 입력 된다는 것이다.

char ch;
int i;

for (i = 0; i < 3; i++)
{
    scanf("%c", &ch);
    printf("%c", ch);
}
tiger 입력시
tig만 출력 된다.
tiger 
>> tig

버퍼에 하나씩 들어간 값을 3번 출력.


scanf함수 반환값 활용

scanf함수는 Ctrl + Z를 누르면 -1이 반환 된다. Ctrl + Z를 누른 후 Enter를 누른 후에 Ctrl + Z를 한 번 더 입력해야 반환 될 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main(void)
{
    int res;
    char ch;
 
    while (1)
    {
        res = scanf("%c"&ch);
        if (res == -1break;
        printf("%d", ch);
    }
 
    return 0;
}
cs
A(입력)
6510cat
99971161020

아스키 코드 값을 출력한다

키보드로 숫자를 입력하는 경우에도 문자열의 형태로 버퍼에 저장 된다. 아스키코드 값으로 코드화 되어 저장됨.

728x90

'C언어 > 기본 개념' 카테고리의 다른 글

[C] 변수 영역  (0) 2022.12.01
[C] 문자열  (0) 2022.11.28
[C] 배열과 포인터  (0) 2022.11.24
[C] 포인터  (0) 2022.11.21
[C] 배열 - Kyeom  (0) 2022.11.18