안녕하세요 파일입니다. 즐거운 금요일이네요 ^^
제가 요즘 피곤하고 바빠서 글을 많이 못썼습니다.. (스스로 반성 ㅎㅎ..)
저번 시간에 변수와 printf에 대해 배웠습니다. 출력을 했으니.. 이제 사용자가 입력을 하는 것도 해봐야겠죠?
그럴 때 사용하는 것이 바로 scanf인데요.
왜 scan이 아니라 scanf인 것은 저번 강의를 제대로 들었다면 아시겠죠. f 가 Formatted 즉 서식화의 약자입니다.
scanf 역시 printf 와 같은 곳인 stdio.h 에서 선언이 되었으므로 전처리기로 똑같이 선언하시면 되겠습니다 ^^
100번 설명보다 1번 예제가 나으니 바로 들어가겠습니다.
#include <stdio.h>
int main(){
int num = 0;
printf("숫자를 입력해주세요 : ");
scanf("%d", &num);
printf("입력받은 수 : %d", num);
}
숫자를 입력해주세요 : 100
입력받은 수 : 100
--------------------------------
Process exited after 0.5087 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
숫자를 입력받으면 그 숫자롤 출력하는 프로그램을 만들어봤습니다.
이 프로그램에서 입력의 핵심은 scanf("% d", &num); 이 부분에 있습니다.
% d는 서식 문자인데 printf에서도 배웠듯 정수를 출력할 때 사용하는 서식 문자입니다.
scanf에서 사용하면 입력받는 값이 정수라는 의미가 되고요.
scanf를 쓰면 커서가 생기는데 printf에서 입력 가독성을 위해 공백을 뒀습니다.
#include <stdio.h>
int main(){
int num = 0;
printf("숫자를 입력해주세요 : ");
scanf("%d", &num);
printf("입력받은 수 : %d", num);
printf("변수의 메모리주소 : %x", &num);
}
숫자를 입력해주세요 : 100
입력받은 수 : 100변수의 메모리주소 : 62fe1c
--------------------------------
Process exited after 0.4685 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
그걸 num에 저장하는데 & 이건 왜 붙을까요?
변수 이름 앞에 &을 붙이면 그 변수의 메모리 주소가 나오는데요.
택배기사가 A라는 사람의 이름을 알아도 주소를 모르면 보낼 수 없듯이
scanf를 이용해 변수에 값을 저장할 땐 꼭 변수 이름 앞에 &를 붙여주셔야 합니다.
위에 예제를 실행해주시면 num 값의 메모리 주소를 알 수 있습니다. (16진수로 출력)
사실 그냥 변수 이름 입력하면 바로 저장되게 해 놨으면 좋았을 건데.. 일단 받아들입시다.
그럼 한번 삼각형의 넓이를 구하는 프로그램을 제작해보겠습니다.
#include <stdio.h>
int main(){
int height = 0;
int width = 0;
printf("높이를 입력해주세요 : ");
scanf("%d", &height);
printf("밑변을 입력해주세요 : ");
scanf("%d", &width);
printf("삼각형의 넓이는 %d 입니다.", height * width * 0.5);
return 0;
}
높이를 입력해주세요 : 10
밑변을 입력해주세요 : 10
삼각형의 넓이는 0 입니다.
--------------------------------
Process exited after 1.858 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
어.. 뭔가 이상하네요 왜 값이 0이 나올까요??
이유는 마지막 줄에 있습니다. 삼각형의 넓이 공식은 초등학교 때 배우니 생략하고..
정수 값에 0.5를 곱했으니 전체적인 값은 실수입니다. 그런데 그것을 % d로 출력하니 정수부(0)만 출력이 된 것이죠.
원하는 값 출력을 위해선 실수 서식 문자 형태로 출력해야겠죠 ^^?
#include <stdio.h>
int main(){
int height = 0;
int width = 0;
printf("높이를 입력해주세요 : ");
scanf("%d", &height);
printf("밑변을 입력해주세요 : ");
scanf("%d", &width);
printf("삼각형의 넓이는 %f 입니다.", height * width * 0.5);
return 0;
}
높이를 입력해주세요 : 20
밑변을 입력해주세요 : 10
삼각형의 넓이는 100.000000 입니다.
--------------------------------
Process exited after 1.144 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
원하는 값이 잘 나왔습니다.
그리고 추가로 저번 강의인 변수 편에서 변수 이름을 의미 있게 지으라고 했듯 변수 이름은 알아보기 쉽게
작성하는 것이 좋습니다 (이 경우에선 높이와 밑변)
#include <stdio.h>
int main(){
int num = 0;
printf("숫자를 입력해주세요 : ");
scanf("%d", &num);
printf("10진수 : %d 16진수 : %x 8진수 : %o", num, num, num);
}
숫자를 입력해주세요 : 10
10진수 : 10 16진수 : a 8진수 : 12
--------------------------------
Process exited after 0.6968 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
이 소스코드는 10진수를 입력받고
각각 10진수, 16진수, 8진수로 출력하는 코드입니다.
사실 scanf는 간단한 게 앞에서 printf를 잘 들었다면
입력받을 때 사용하는 서식 문자 방식이 똑같기 때문에 어렵지 않습니다.
#include <stdio.h>
int main(){
float f1, f2;
double d1, d2;
printf("실수를 2개 입력해주세요(float) : ");
scanf("%f %f", &f1, &f2);
printf("%f %f \n", f1, f2);
printf("실수를 2개 입력해주세요(double) : ");
scanf("%lf %lf", &d1, &d2);
printf("%f %f", d1, d2);
}
실수를 2개 입력해주세요(float) : 1.3 4.5
1.300000 4.500000
실수를 2개 입력해주세요(double) : 5.5 9.9
5.500000 9.900000
--------------------------------
Process exited after 4.354 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
float와 double 값 2개를 각각 입력받고 출력하는 예제입니다.
printf처럼 scanf 도 서식 문자를 여러 개 사용하여 입력값을 한꺼번에 받을 수 있습니다.
그리고 printf는 double 값을 출력할 때 % f를 쓰던 % lf를 쓰던 상관없지만
scanf로 double 값을 입력받을 땐 꼭 % lf를 써야 합니다 *Long double 일 땐 % Lf임
이 부분에 관해서는 추가로 설명하겠습니다.
scanf는 여기까지입니다. 별로 어렵지 않죠 ^^?
다음편에선 상수에 대해 알아보겠습니다. 감사합니다.
'프로그래밍 강좌 > C' 카테고리의 다른 글
[C언어 강좌] #5-1 상수 이용하기(Constant) (0) | 2019.11.10 |
---|---|
[C언어 강좌] #4-2 scanf와 printf에서 %f, %lf의 차이점 (0) | 2019.11.08 |
[C언어 강좌] #3 변수(variable) (0) | 2019.11.02 |
[C언어 강좌] #2-2 printf 로 마음대로 출력하기 (0) | 2019.11.01 |
[C언어 강좌] #2-1 printf 로 마음대로 출력하기 (0) | 2019.10.31 |