본문 바로가기
C언어 공부

05. 문자형, 입력함수

by 나노다 2024. 10. 14.

문자

  • 컴퓨터는 0과 1만 처리할 뿐임. 따라서 문자를 처리하기 위해 문자를 숫자에 대응시킴.
  • 대응된 문자 체계가 아스키코드, 유니코드 등
#include <stdio.h>
int main() {
	char a;
    a = 'a';
    printf("a의 값과 들어 있는 문자는? 값 : %d, 문자 : %c \n", a, a);
    return 0;
}
// 출력 : a의 값과 들어 있는 문자는? 값 : 97, 문자 : a
// ASCII 코드로 a가 97에 대응
  • char : 주로 문자를 저장하는 변수. character의 약자.
  • "%c" : 문자 서식 문자

 

입력

#include <stdio.h>
int main() {
// 문자형 변수 선언 해주고,
	char ch1;
   	char ch2;
// 첫 서식문자 위치에 입력한 값은 변수 ch1에, 다음 입력 값은 ch2에 저장됨.
	scanf("%c, %c", &ch1, &ch2);
	printf("입력한 값은 %c와 %c입니다.", ch1, ch2);
   	return 0;
}
  • scanf() : 입력함수. 출력함수인 printf()와 짝꿍. 입력값 저장할 변수 앞에 &써줌.
    오버플로우 문제가 있어 scanf_s로 바꿔 쓰곤 함.
  • char형 변수의 입력 서식문자와 출력 서식문자는 모두 "%c
#include <stdio.h>
int main() {
// 정수형 변수 선언 해주고,
	short sh;
   	int i;
   	long lo;
// 입출력
   	scanf("%hd, %d, %ld", &sh, &i, &lo);
	printf("입력한 값은 %d, %d, %ld입니다.", sh, i, lo);
   	return 0;
}
  • short형 변수의 입력 서식문자는 "%hd", 출력 서식문자는 "%d"
  • int형 변수의 입력 서식문자와 출력 서식문자는 모두 "%d"
  • long형 변수의 입력 서식문자와 출력 서식문자는 모두 "%ld"
#include <stdio.h>
int main() {
// 실수형 변수 선언 해주고,
	float fl;
   	double du;
// 입출력
   	scanf("%f, %lf", &fl, &du);
	printf("입력한 값은 %f, %f입니다.", fl, du);
   	return 0;
}
  • float형 변수의 입력 서식문자와 출력 서식문자는 모두 "%f"
  • double형 변수의 입력 서식문자는 "%lf", 출력 서식문자는 "%f"

 

다른 변수형 간의 연산에 주의할 점!

  • 1번과 2번의 결과가 달라지는 이유?
double a;
a = 4.5;
// 1번은 40.1
9 * a / 5 + 32
// 2번은 36.5
9 / 5 * a + 32
  • 1번의 연산 순서
  • 9*a -> /5 -> +32

첫 연산은 int 9와 double a의 연산이므로 산술 변환되어 9가 double형이 되며, 그 결과인 40.5 역시 double형이 됨. 마찬가지로 double인 첫 결과와 int인 5의 연산인 두 번째의 결과 8.1 역시  double형. 마지막 연산도 산술 변환되면서 40.1이 됨.

 

  • 2번의 연산 순서
  • 9/5 -> *a -> +32

첫 연산이 int 9와 int 5의 만남인지라 결과인 1.8 역시 int형이 되며 1만 남아버림. 두 번째 연산이 a * 1이 돼버리며 세 번째 연산은 그대로 a + 32이므로 36.5가 됨.