인삿말
안녕하세요. 벌써 세 번째 글이네요!
저번 글에서는 c언어 구조와 프로그램 실행에
대해서 배웠습니다. 이번 시간에는
프로그래밍 언어에서 가장 많이 쓰인다고
볼 수 있는 printf()함수와 scanf() 함수에 대해
배워보도록 하겠습니다.
제 이전글에 Visual studio로
프로그램 실행하는 방법이 있으니
필요하신 분들은
아래 링크를 통해 들어가 주세요.
2020/04/20 - [프로그래밍언어/c언어] - C언어 독학 #2. 구조 및 Visual studio로 프로그램 실행
printf() 함수
저번 시간에 stdio.h 파일에
표준 라이브러리 함수가 정의되어있다고 했습니다.
그래서 컴파일러가 이 헤더파일을
전처리해서 printf()함수의 기능을
할 수 있게 한다고 했는데요.
저번 시간에 썼던 코드로 예를 들어보겠습니다.
printf("Hello World\n");
여기서 printf()함수는 모니터에 데이터를
출력하는 것이라고 했으니까
" "내부에 있는 문자열을 모니터에
출력하겠죠?
하지만 궁금한 게 있을 겁니다.
World 뒤에 있는 \n는 도대체 무엇일까요?
바로 C언어에서 쓰이는 특수 문자입니다.
백슬래시(\)를 이용해서 여러 특수 문자를
구성하는데 아래 표를 통해서 확인해볼게요.
위에 있는 특수문자들을 큰따옴표 안에서 문자열로 쓰면
설명대로 기능을 하게 됩니다.
"Hello World\n"
에서는 \n을 썼으니까
줄 바꿈이 되어서
줄이 바뀌고 프로그램이
종료되는 것 입니다.
열 복귀는 다른 말로 캐리지 리턴(Carriage Return)
으로 쓰게 되면 커서가 그 줄의 맨앞으로 갑니다.
printf("a\rb");
이렇게 쓰이면 커서가 맨 앞으로 가게 되어
a를 덮고 b를 쓰게 됩니다.
따라서 출력은
b만 되겠죠?
나머지 특수문자들은 설명을 보면
충분히 이해하실 수 있을겁니다.^^
printf() 함수는
print Formatted를 줄여쓴 함수입니다.
서식 문자에 따라 다양한 출력 형식을
갖고있습니다.
printf("%d", 7);
여기서 printf()함수는 %d를 출력하라는 것이
아닙니다.
뒤에 있는 정수 7을 출력하라는 서식문자인 것입니다.
이 서식문자는 단순히 숫자만 출력할 수 있을뿐아니라
연산결과도 출력할 수 있습니다.
printf("%d", 1+8);
printf()함수는 1+8 연산결과 9를 서식문자로
받아 모니터에 출력하게 됩니다.
%d는 Decimal의 약자로 10진수 정수를 의미하는데요.
8진수, 16진수 또한 문자열 등등 다양한 서식문자가
존재합니다.
아래 표를 보고 참조 하시면 되겠습니다.
10진수 20을 각각 서식 문자에 맞춰 8진수 16진수
로 출력을 하게 되면
이와 같은 결과를 얻게됩니다.
2진수와 더불어 8진수,16진수 표현에
대해서는 좀 더 나중에 다뤄보도록 하겠습니다.
각각 서식문자에 맞춰 문자열과 문자를 출력합니다.
"안녕하세요"와 'A'가 각각 알맞게 출력된 걸
확인할 수 있습니다.
이번에는 또다른 옵션을 추가해보도록 하겠습니다.
%03d : 필드폭 3칸 오른쪽 정렬. 나머지 부분은 0
%-3d : 필드폭 3칸 왼쪽 정렬
%3d : 필드폭 3칸 오른쪽 정렬
23은 서식문자 %3d로 받아서
세 칸을 확보하고 오른쪽 정렬
10은 서식문자 %-3d로 받아서
세 칸을 확보하고 왼쪽 정렬
5는 서식문자 %03d로 받아서
세 칸을 확보하고 오른쪽 정렬에
나머지 부분은 0이 채워진 걸
확인 할 수 있습니다.
scanf() 함수
scanf() 함수는 데이터를 입력받을 때 사용하는
함수입니다.
이 함수 역시 stdio.h 파일에 정의되어 있습니다.
그러면 이 함수도 사용하려면 stdio.h 파일을
포함시켜야겠죠~?
키보드를 통해 데이터를 입력받으면
이 데이터를 사용하기 위해 저장해야 합니다.
scanf("%d", &a);
이런 구조인데요. printf()함수와 마찬가지로
서식문자를 사용해 데이터를 받습니다.
%d니까 정수형 데이터를 받겠죠?
그런데 조금 다른 점이 있습니다.
&a 이게 과연 무엇일까요?
우선 a는 변수라고 하는 것입니다.
뒤에서 배울건데 일단은
변수 a를 저장공간 이라고
알아둡시다.
scanf("%d", &a);
를 해석해보면
정수형 데이터를 받아서
a 라는 공간에 저장한다는 의미입니다.
scanf()함수와 printf()함수를 같이 쓴 예시입니다.
근데 여기서 이상한 문구가 보이죠?
#define _CRT_SECURE_NO_WARNINGS
visual studio 버전이 바뀌면서
보안이 강화된 scanf_s()함수를
사용하도록 권장하고 있기때문에
에러가 뜰 겁니다.
scanf()함수를 쓰기 위해서
위와 같이 정의해주는 것이고요.
다른 방법도 있습니다.
프로젝트->속성->구성속성->C/C++
->SDL검사를 아니요로 바꾸면
됩니다!
자, 이제 코드 분석을 해보겠습니다.
int a;
는 정수형 변수를 선언한 것 입니다.
우선은 a라는 정수형 저장공간
확보 정도로만 알아두죠.
printf()함수로 "좋아하는 숫자 : "
를 출력했고 바로 다음으로
scanf()함수를 사용하고 있습니다.
scanf("%d", &a);
는 정수형 데이터를 받아서
a라는 저장공간에 저장하라는 의미입니다.
그러면 a에는 우리가 입력한
정수가 저장되어 있겠죠?
이제는 printf()함수를 사용해서
a라는 공간에 있는 정수를 출력하겠습니다.
printf("좋아하는 숫자는 %d입니다.", a);
이렇게 말입니다.
저는 8을 입력해서 알맞게 출력된 걸 확인했습니다.
scanf()함수도 printf()함수와 마찬가지로
서식 문자를 사용해서 데이터를 입력하고
변수에 저장한다는 정도로 알고있으면 되겠습니다.
마무리
자 이번 시간에는 printf(), scanf() 함수에 대해서
다뤄봤는데요. 갑자기 변수라는 개념도 나오면서
어리둥절해 하시는 분들도 있을 거예요.
우선은 일단 저장공간이라는 개념으로 알고 계세요!
다음 시간에 변수에 대해 제대로 다뤄보도록
하겠습니다. 오늘도 봐주셔서 감사합니다~
'프로그래밍언어 > c언어' 카테고리의 다른 글
C언어 독학 #6. 연산자 (0) | 2020.05.13 |
---|---|
C언어 독학 #5. 상수 변하지 않는 데이터 (2) | 2020.05.12 |
C언어 독학 #4. 변수 데이터를 저장하자 (6) | 2020.04.22 |
C언어 독학 #2. 구조 및 Visual studio로 프로그램 실행 (6) | 2020.04.20 |
C언어 독학 #1. 소개 및 개발 환경(Visual Studio) 설치 (6) | 2020.04.19 |