공부 기록/C

2024.04.03. C언어 - 문자

bumm 2024. 4. 3. 13:48

아스키코드

문자 상수 'a'는 정수 값 97로 바뀜.

아스키코드 : 컴퓨터는 모든 값을 이진수로만 이해할 수 있음. 그러므로 하나의 룰을 만든 것인데 그것이 아스키코드.

 

키보드에서 9를 누르고 싶다.

키보드 : 9(상수) => 0x39(아스키코드 16진수) => 39를 이진수로 만드는 방법

           3                 9

8  4   2   1     ㅣ  8  4  2  1

0  0   1   1           1  0  0  1    = 이진수

9를 만들려면 8, 1을 더하면 되니까 8과 1에만 1.

3을 만들려면 2와 1을 더하면 되니까 그 자리에만 1.

 

특징 )

  • 알파벳과 숫자는 각각 연속된 아스키 코드 값을 가짐
  • 소문자 > 대문자
  • 제어 문자는 백슬래시와 함께 표시하여 출력할 때 그 기능을 수행함

scanf 함수를 사용한 문자 입력

자주 쓰이진 않음.

대기시키는 함수.

scanf("%c", &x);

%c는 알파벳, 숫자 모양의 문자 등 형태가 있는 문자 +) 공백, 탭 문자, 개행 문자(enter) 등도 입력함

 

  • scanf 함수는 입력한 문자를 메모리의 1byte 공간에 저장하도록 설계됨. int 선언해도 상관은 없는데 가능한 char를 쓰는 게 좋음.

getchar 함수와 putchar 함수

scanf의 효율적인 사용을 위한 함수 

getchar와 putchar는 문자 전용 입출력 함수임

 

int getchar(void); // 매개변수가 없고 입력한 문자를 반환
int putchar(int); // 출력할 문자를 인수로 줌

 

getchar 함수와 putchar 함수 사용법

#include <stdio.h>

int main(void)
{
	int ch;
    
    ch = getchar();
    printf("입력한 문자 : ");
    putchar(ch);
    putchar('\n');
    
    return 0;
)

 

실행결과

A를 입력했을 때

입력한 문자 : A 로 출력됨

 

  • getchar 함수는 매개변수가 없으므로 괄호만 사용하여 호출함
  • 호출된 함수는 아스키코드값을 반환하므로 int형 변수로 받음

이때, int형인 이유는 무엇일까?

문자 이외의 값도 반환하기 때문임.

 

구분 사용 예 기능
입력 char ch;
scanf("%c", &ch);
char형 변수 사용
%c 변환 문자로 입력
공백 문자, 탭 문자, 개행 문자도 입력
int ch;
ch = getchar( );
int형 변수 사용
입력 문자의 아스키 코드 값 반환
공백 문자, 탭 문자, 개행 문자도 입력
출력 printf("%c", ch);
putchar(ch);
%c 변환 문자 사용
문자 출력 전용 함수, 출력할 문자 전달

복습용 문제 : 331페이지

문자열

#include <stdio.h>

int main(void)
{
    printf("apple이 저장된 시작 주소 값 : %p\n", "apple");
    printf("두 번째 문자의 주소 값 : %p\n", "apple" + 1);
    printf("첫  번째 문자 : %c\n", *"apple");
    printf("두 번째 문자 : %c\n", *("apple" + 1));
    printf("배열로 표현한 세 번째 문자 : %c\n", "apple"[2]);
    
    return 0;
}

문자열 상수가 주소란 증거

 

실행결과


apple이 저장된 시작 주소 값 : 0x55cac9d81008
두 번� 문자의 주소 값 : 0x55cac9d81009
첫  번째 문자 : a
두 번째 문자 : p
배열� 표현한 세 번째 문자 : p