Unit 9. 문자 자료형 사용하기
C 언어에서는 정수 자료형인 char를 이용하여 문자 한 개를 저장한다.
char에 문자를 저장할 때는 문자 자체를 저장하는 것이 아니라 문자에 해당하는 정숫값을 저장하게 된다.
각 정숫값이 어떤 문자에 해당되는지 표로 나타낸 것이며 이 규칙을 아스키(ASCII) 코드라고 한다.
C 언어에서 문자는 ' ' (작은따옴표)로 묶어서 표현한다.
char c1 = 'a';
작은따옴표는 문자 하나만 묶을 수 있으며 두 개 이상은 묶을 수 없다.
9.1 문자 변수 선언하기
#include <stdio.h>
int main()
{
char c1 = 'a'; // 문자 변수를 선언하고 문자 a를 저장
char c2 = 'b'; // 문자 변수를 선언하고 문자 b를 저장
// char를 %c로 출력하면 문자가 출력되고, %d로 출력하면 정숫값이 출력됨
printf("%c, %d\n", c1, c1); // a, 97: a의 ASCII 코드값은 97
printf("%c, %d\n", c2, c2); // b, 98: b의 ASCII 코드값은 98
return 0;
}
실행 결과는 다음과 같다.
a, 97
b, 98
아스키코드표에 따라 정수 97과 문자 'a'는 같으며 어떤 서식 지정자를 사용해서 출력하느냐에 따라 다르게 보인다.
※ 문자 '0'과 숫자 0의 차이점
문자 자료형에 같은 숫자를 저장한다 하더라도 문자 '0'과 숫자 0은 전혀 다르다.
#include <stdio.h>
int main()
{
char c1 = '0'; // 문자 0을 저장
char c2 = 0; // 숫자 0을 저장
printf("%c %d\n", c1, c1); // 0 48: 문자 상태로 0이 출력됨
// 문자 0의 ASCII 코드 48이 출력됨
printf("%c %d\n", c2, c2); // 0: ASCII 코드 0은 널문자이므로 아무것도 출력되지 않음
// 정수 0이 출력됨
return 0;
}
printf에서 %d로 출력했을 때 '0'은 48, 0은 0으로 출력되므로 전혀 다른 값이라는 것을 알 수 있다.
9.2 문자로 연산하기
문자는 ASCII 코드 규칙에 의해 정수로 저장되므로 정수처럼 덧셈, 뺄셈 등을 할 수 있다.
#include <stdio.h>
int main()
{
printf("%c %d\n", 'a' + 1, 'a' + 1); // b 98: a는 ASCII 코드값 97이고,
// 97에 1을 더하여 98이 되었으므로 b가 출력됨
printf("%c %d\n", 97 + 1, 97 + 1); // b 98: ASCII 코드값 97에 1을 더하여 98이 되었으므로
// b가 출력됨
return 0;
}
'a' + 1과 같이 작은따옴표로 묶은 문자는 정수를 더하거나 뺄 수 있다. 'a'의 ASCII 코드값은 97이고, 97에 1을 더하면 98입니다. 따라서 98에 해당하는 문자 b가 출력된다.
9.3 제어 문자 사용하기
문자 자료형에는 숫자나 알파벳뿐만 아니라 제어 문자도 저장할 수 있다.
#include <stdio.h>
int main()
{
char c1 = 'a'; // 문자 a 할당
char c2 = 'b'; // 문자 b 할당
char lineFeed = '\n'; // 제어 문자 \n 할당
printf("%c%c%c%c", c1, lineFeed, c2, lineFeed); // 제어 문자도 %c로 출력할 수 있음
return 0;
}
변수 lineFeed에 제어 문자 '\n'를 넣은 뒤 printf에서 %c로 출력해보면 a와 b사이에 줄바꿈이 되는 것을 볼 수 있다. 제어 문자라 하더라도 printf에서 %d, %x로 출력하면 변수에 들어있는 정수가 바로 출력된다.
※ 파이썬과 차이점 : 파이썬의 경우 문자와 문자열이 구분되지 않고 문자열로 통합되서 쓰였으나, C언어에서는 char형이 문자 하나만을 저장할 수 있는 자료형으로 쓰이며, 문자열은 저장하지 못한다.
Unit 10. 상수 사용하기
상수는 변하지 않는 값을 뜻한다.
변수는 한 번 선언하면 값을 계속 바꿀 수 있지만 상수는 처음 선언할 때만 값을 할당할 수 있으며 그다음부터는 값을 바꿀 수 없다.
※ 상수와 리터럴의 차이점
// ↓ 상수
const int con1 = 10;
// ↑ 리터럴
리터럴(literal)은 "문자 그대로"라는 뜻인데 C 언어에서는 값 그 자체를 뜻한다(문자 or 숫자 or 문자열 등등)
그리고 상수(constant)는 변수처럼 리터럴이 저장된 공간이다.
상수는 값을 바꾸는 것을 방지하기 위해 사용하며 코드의 의도를 명확하게 만들 수 있다.
10.1 상수 사용하기
- const 자료형 상수이름 = 값;
#include <stdio.h>
int main()
{
const int con1 = 1; // 상수. 선언과 동시에 초기화
const float con2 = 0.1f; // 상수. 선언과 동시에 초기화
const char con3 = 'a'; // 상수. 선언과 동시에 초기화
printf("%d %f %c\n", con1, con2, con3); // 1 0.100000 a
return 0;
}
상수를 선언하는 방법은 변수를 선언하는 방법과 같으며 자료형 앞에 const만 붙여주면 된다. 단, 상수는 반드시 선언과 동시에 값을 할당하여 초기화해주어야 하며 초기화를 하지 않으면 컴파일 에러가 발생한다.
+ const를 붙여서 상수가 되면 더 이상 값을 할당할 수 없는 고정된 상태가 된다.
10.2 리터럴 접미사 사용하기
리터럴은 다음과 같이 접미사를 활용해 크기를 명확하게 표기한다.
#include <stdio.h>
int main()
{
printf("%ld\n", -10L); // long 크기의 정수 리터럴
printf("%lld\n", -1234567890123456789LL); // long long 크기의 정수 리터럴
printf("%u\n", 10U); // unsigned int 크기의 정수 리터럴
printf("%lu\n", 1234567890UL); // unsigned long 크기의 정수 리터럴
printf("%lu\n", 10UL); // unsigned long 크기의 정수 리터럴
printf("%llu\n", 1234567890123456789ULL); // unsigned long long 크기의 정수 리터럴
return 0;
}
반대로 변수를 선언할 때는 long, long long, unsigned long처럼 정수 자료형으로 크기를 정할 수 있었음.
실수 리터럴 또한 접미사를 사용하여 크기를 정한다.
실수 리터럴 끝에 f 또는 F를 붙이면 float 크기가 되고, l 또는 L을 붙이면 long double 크기가 된다. 그리고 접미사를 붙이지 않으면 double 크기이다.
Unit 11. 입력 값을 변수에 저장하기
11.1 정수 입력받기
scanf 함수 : 표준 입력을 받아서 변수에 값을 저장하는 함수
- scanf(서식, 변수의주소);
#define _CRT_SECURE_NO_WARNINGS // scanf 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>
int main()
{
int num1;
printf("정수를 입력하세요: ");
scanf("%d", &num1); // 표준 입력을 받아서 변수에 저장
printf("%d\n", num1); // 변수의 내용을 출력
return 0;
}
scanf 함수의 첫 번째 인수에는 큰따옴표 안에 서식 지정자를 넣어서 입력받을 값의 형태를 설정한다.
그리고 두 번째 인수에는 입력 값을 저장할 변수를 넣는다. 여기서 주의할 점은 &num1처럼 변수 앞에 &를 붙여주어야 한다는 점이다.
11.2 한번에 정수 두 개 입력받기
#define _CRT_SECURE_NO_WARNINGS // scanf 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>
int main()
{
int num1, num2;
printf("정수를 두 개 입력하세요: ");
scanf("%d %d", &num1, &num2); // 값을 두 개 입력받아서 변수 두 개에 저장
printf("%d %d\n", num1, num2); // 변수의 내용을 출력
return 0;
}
scanf 함수는 printf 함수와 사용 방법이 유사하다.
입력받을 개수만큼 서식 지정자를 넣어주고, 서식 지정자 개수만큼 변수를 넣어주면 된다.
11.3 실수 입력받기
#define _CRT_SECURE_NO_WARNINGS // scanf 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>
int main()
{
float num1;
printf("실수를 입력하세요: ");
scanf("%f", &num1); // 실수를 입력받아서 변수에 저장
printf("%f\n", num1); // 변수의 내용을 출력
return 0;
}
실수를 입력받을 것이므로 변수는 float로 선언해주고, scanf에 서식 지정자로 %f를 설정해준다.
만약 변수를 double로 선언했다면 scanf에는 서식 지정자로 %lf를 넣는다.
11.4 문자 입력받기
#define _CRT_SECURE_NO_WARNINGS // scanf 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>
int main()
{
char c1;
printf("문자를 입력하세요: ");
scanf("%c", &c1); // 문자를 입력받아서 변수에 저장
printf("%c\n", c1); // 변수의 내용을 출력
return 0;
}
문자를 입력받을 것이므로 변수는 char로 선언해주고, scanf에 서식 지정자로 %c를 설정해준다.
scanf 함수 대신 getchar 함수를 사용해도 문자 하나를 입력받을 수 있다.
※ 파이썬과의 차이점 : input()을 통해 사용자로부터 입력을 받는 파이썬과 달리 C언어는 scanf 함수를 통해 사용자로부터 입력을 받는다. 그리고 scanf 함수 사용시 입력받고자 하는 자료형에 맞게 미리 변수를 선언해줘야 하며, 서식지정자도 맞춰줘야 한다는 점에서 파이썬과 명확히 다르다.
'Programming Languages > C' 카테고리의 다른 글
[P4C] C 언어 코딩 도장 : 문제 풀이2 (0) | 2021.02.18 |
---|---|
[P4C] C언어 코딩 도장 : UNIT 12 ~ UNIT 16 (0) | 2021.02.17 |
[P4C] C언어 코딩 도장 : UNIT 5 ~ UNIT 8 (0) | 2021.02.15 |
[P4C] C 언어 코딩 도장 : 문제 풀이 (0) | 2021.02.15 |
[P4C] C언어 코딩 도장 : UNIT 1 ~ UNIT 4 (0) | 2021.02.15 |