공부 기록/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